get 和 put 函数的作用是什么?
What does the get and put function do?
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)
我完全迷失在get
和put
这两个函数中。
首先,get
的类型签名中没有箭头:
get :: State s s
这是什么意思?
s
在get
和put
中是什么意思?他们是国家吗?
请记住,State s a
本质上是一个函数 s -> (a, s)
,也就是说,一个函数接受一个状态和 returns 某种类型的值 a
和一个新的状态。
所以 get :: State s s
是一个 s -> (s, s)
,一个简单地 returns 当前状态的函数。
put :: s -> s -> ((), s)
实现为 s -> _ -> ((), s)
,一个接受给定状态、忽略当前状态、returns 给定状态且不产生新值的函数。
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)
我完全迷失在get
和put
这两个函数中。
首先,get
的类型签名中没有箭头:
get :: State s s
这是什么意思?
s
在get
和put
中是什么意思?他们是国家吗?
请记住,State s a
本质上是一个函数 s -> (a, s)
,也就是说,一个函数接受一个状态和 returns 某种类型的值 a
和一个新的状态。
所以 get :: State s s
是一个 s -> (s, s)
,一个简单地 returns 当前状态的函数。
put :: s -> s -> ((), s)
实现为 s -> _ -> ((), s)
,一个接受给定状态、忽略当前状态、returns 给定状态且不产生新值的函数。