Haskell get和put函数做什么?
发件人: 我完全迷失在这两个函数中Haskell get和put函数做什么?,haskell,types,monads,state-monad,Haskell,Types,Monads,State Monad,发件人: 我完全迷失在这两个函数中get和put 首先,get的类型签名中没有箭头: get :: State s s 这是什么意思 s在get和put中是什么意思?它们是状态吗?记住状态sa本质上是一个函数s->(a,s),也就是说,一个函数接受状态并返回某种类型的值a和一个新状态 因此,get::states s是一个s->(s,s),一个只返回当前状态的函数 put::s->s->((),s)实现为s->((),s),该函数采用给定状态,忽略当前状态,返回给定状态,并且不生成新值 状态a
get
和put
首先,get
的类型签名中没有箭头:
get :: State s s
这是什么意思
s
在get
和put
中是什么意思?它们是状态吗?记住状态sa
本质上是一个函数s->(a,s)
,也就是说,一个函数接受状态并返回某种类型的值a
和一个新状态
因此,get::states s
是一个s->(s,s)
,一个只返回当前状态的函数
put::s->s->((),s)
实现为s->((),s)
,该函数采用给定状态,忽略当前状态,返回给定状态,并且不生成新值 状态a b
表示存储类型为a
的状态的状态,并“返回”类型为b
的元素,因此对于get
您查询状态,因此它返回状态,因此在这种情况下b~a
get'
和put'
是在幻灯片的第32页上定义的。@WillNess:我认为这是一个有点不幸的术语,因为State
类型的项本身不存储状态,它基本上是状态
s之间的“转换”(可以是无操作的转换),但实际上不是一个状态(
本身:)。@user8314628不,它是一个函数。这是一种价值。哈斯克尔在这方面是矛盾的。你应该在你的问题中包含更多的代码,比如,State
@user8314628的定义如果我做get=[“fetch”,“my”,“stuff”]
,那么什么是get
?嗯,这是一个字符串列表(或[String]
)。类似地,您的get
是一个类型为states s
的值。或者如果我要做foo=Nothing
,那么foo
将不是一个函数,而是一个类型的值,可能s
@WillNess绝对不是。类型为State sa
的值中有一个类型为s->(A,s)
的函数,但它本身不是一个。但是函数s->(s,s)
“只是返回”一个元组,否?@WillNess yes它返回一个元组,其中两个成员都是当前状态。此元组的第一个成员是可以覆盖的值,第二个成员是正在线程化的状态,将被赋予下一个有状态步骤。恰好在get
中,两个成员是相同的。我们将当前状态返回到fmap'd结束,并将其传递到下一个有状态步骤。我试图指出答案的一部分,我认为这对新手来说会非常困惑。get::state s
是一个简单返回当前状态的函数。那么函数get
不带参数并返回一个值,states s
是返回值的类型吗?
get :: State s s