【问题标题】:Haskell <<loop>> ExceptionHaskell <<loop>> 异常
【发布时间】:2014-10-15 12:47:56
【问题描述】:

我的 State Monad 实例出现 loop>> 异常,我想这指的是无限循环,但是我看不出我的代码如何导致使用:

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))

如果有人有线索可以帮助我,非常感谢!

最好的问候, 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

【问题讨论】:

  • 您不得以这种方式删除您的内容。这对那些花时间和精力回答你问题的人来说是完全不公平的。至于其他学生“作弊”;如果您一开始在这里发帖不是“欺诈”,那么其他人也使用相同的信息怎么可能是欺诈?

标签: haskell state monads


【解决方案1】:
        let (a, s', c) = runState' st (s,c)

这是一个递归定义:结果中的c用于计算结果,用于...

您的意思可能是 let (a,s',c') = runState' st (s,c) in runState' (k a) (s',(c' &lt;&gt; oneBind) ),没有带阴影的 c 变量。

【讨论】:

  • 确实修复了,我没注意,谢谢!一个'口音可以产生的差异哈哈。
猜你喜欢
  • 2023-03-24
  • 1970-01-01
  • 2018-05-01
  • 1970-01-01
  • 2016-08-05
  • 2011-07-10
  • 1970-01-01
  • 2021-04-13
  • 2014-02-25
相关资源
最近更新 更多