Haskell 结果状态为提供的参数且值为单位的状态
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
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)
^ ^