Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.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 结果状态为提供的参数且值为单位的状态_Haskell_State Monad - Fatal编程技术网

Haskell 结果状态为提供的参数且值为单位的状态

Haskell 结果状态为提供的参数且值为单位的状态,haskell,state-monad,Haskell,State Monad,haskell书中的练习23.8.2要求我构建如下状态: put' :: s -> State s () put' s = undefined -- should act like: -- Prelude> runState (put "blah") "woot" -- ((),"blah") 我得到的唯一类型检查的实现是 import Control.Monad.Trans.State -- Not sure this is the right import put' :: s

haskell书中的练习
23.8.2
要求我构建如下状态:

put' :: s -> State s ()
put' s = undefined
-- should act like:
-- Prelude> runState (put "blah") "woot"
-- ((),"blah")
我得到的唯一类型检查的实现是

import Control.Monad.Trans.State -- Not sure this is the right import
put' :: s -> State s ()
put' s = state $ \s -> ((), s)
但这将返回
runState
参数中的状态,而不是
put'

λ> runState (put' "blah") "woot"
((),"woot")
我需要什么haskell杂技来解决这个问题?不知道如何访问
“blah”

您对两个不同的绑定重用了变量
s
。尝试使用其他名称,解决方案将显而易见;-)

顺便说一下,您应该使用GHC/GHCi中的
-Wall
标志启用警告。这会指出您已经定义了两个
s
twise,第二个绑定将第一个绑定隐藏起来。

Yes,Yes,lambda等价(或类似的…)
put' s = state $ \s -> ((), s)
     ^            ^