use*_*349 0 monads state haskell
我正在为我的State Monad实例获得一个<< loop >> Exception,我想这是指一个无限循环,但我看不出我的代码在使用时会如何导致一个:
instance Monad (State' s) where
-- return :: a -> State' s a
return x = State' (\(s,c) -> (x, s, (c <> oneReturn) ))
-- (>>=) :: State' s a -> (a -> State' s b) -> State' s b
st >>= k = State' $ \(s,c) -> let (a, s', c) = runState' st (s,c)
in runState' (k a) (s',(c <> oneBind) )
instance MonadState (State' s) s where
-- get :: State' s s
get = State' $ \(s,c) -> (s,s, (c <> oneGet))
-- put :: s -> State' s ()
put s = State' $ \(_,c) -> ((),s, (c <> onePut))
Run Code Online (Sandbox Code Playgroud)
如果有人有线索,可以帮助我,非常感谢!
最好的问候,Skyfe.
编辑:作为参考,一个< SomeMonadicFunc >用于在绑定当前Counts值时正确增加计数器 -
oneBind = Counts 1 0 0 0
oneReturn = Counts 0 1 0 0
oneGet = Counts 0 0 1 0
onePut = Counts 0 0 0 1
Run Code Online (Sandbox Code Playgroud)
let (a, s', c) = runState' st (s,c)
Run Code Online (Sandbox Code Playgroud)
这是一个递归定义:c结果中的结果用于计算结果,用于...
你可能意味着let (a,s',c') = runState' st (s,c) in runState' (k a) (s',(c' <> oneBind) ),没有阴影c变量.
| 归档时间: |
|
| 查看次数: |
239 次 |
| 最近记录: |