The*_*Cat -2 haskell state-monad
23.8.2在haskell书中练习要求我构建如下状态:
put' :: s -> State s ()
put' s = undefined
-- should act like:
-- Prelude> runState (put "blah") "woot"
-- ((),"blah")
Run Code Online (Sandbox Code Playgroud)
我得到的唯一一个类型的实现是
import Control.Monad.Trans.State -- Not sure this is the right import
put' :: s -> State s ()
put' s = state $ \s -> ((), s)
Run Code Online (Sandbox Code Playgroud)
但这会在参数中返回状态runState,而不是put':
?> runState (put' "blah") "woot"
((),"woot")
Run Code Online (Sandbox Code Playgroud)
我需要修复什么haskell杂技?看不出我怎么能访问"blah".
put' s = state $ \s -> ((), s)
^ ^
Run Code Online (Sandbox Code Playgroud)
您将该变量重s用于两个不同的绑定.尝试使用不同的名称,解决方案将是显而易见的;-)
顺便说一句,您应该使用-WallGHC/GHCi中的标志启用警告.这可能会指出你已经定义了stwise,第二个绑定会影响第一个.