get和put函数有什么作用?

时间:2018-12-08 11:36:47

标签: haskell types monads state-monad

来自our lecture notes

get' state = (state, state)
put' item state = ((), item)     -- () is void value

data State s a = State (s -> (a, s))

-- Functions get and put:        -- (sic!)

get :: State s s
get = State get'

put :: s -> State s ()
put item = State (put' item)

我完全迷失了这两个功能getput

首先,get的类型签名中没有箭头:

get :: State s s

这是什么意思?

sgetput中是什么意思?他们在说吗?

1 个答案:

答案 0 :(得分:0)

请记住,State s a本质上是一个函数s -> (a, s),也就是说,该函数具有一个状态并返回某个类型的值a和一个新状态。

所以get :: State s s是一个s -> (s, s),一个仅返回当前状态的函数。

put :: s -> s -> ((), s)被实现为s -> _ -> ((), s),该函数采用给定状态,忽略当前状态,返回给定状态,并且不产生任何新值。