Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell get和put函数做什么?_Haskell_Types_Monads_State Monad - Fatal编程技术网

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