对于学校编程练习,我要求get
和put
以modify
和modify
的方式实施get
和{{put
1}}。所以我一直在困惑一些堆叠溢出的帖子和其他材料把这些碎片放在一起。这是我到目前为止所拥有的
class Monad m => MonadState m s | m -> s where
get :: m s
get = modify id -- (\s -> s)
put :: s -> m ()
put s = do
modify (\_ -> s)
return ()
modify :: (s -> s) -> m s
modify f = do
x <- get
let newX = f x
put x
return newX
我已经认为它运行不正常,所以我的问题是如何在ghci中测试这段代码?并且可能会把我推向正确的方向。
编辑: 整个monad的想法有点压倒性,我老实说我不知道如何测试它或在工作中看到它。