haskell - Acid-state:更新的 MonadState 实例

标签 haskell ghc acid-state

我正在尝试酸性状态documentation声明 Update stMonadState st 的一个实例。我尝试了不同的事情,但我的编译器不想看到这一点:(我尝试了 examples 中的 HelloWorld.hs ,但遇到了同样的问题:

HelloWorld.hs:26:7:
    No instance for (MonadState
                       HelloWorldState (Update HelloWorldState))
      arising from a use of `put'
    Possible fix:
      add an instance declaration for
      (MonadState HelloWorldState (Update HelloWorldState))
    In the expression: put (HelloWorldState newValue)
    In an equation for `writeState':
        writeState newValue = put (HelloWorldState newValue)

HelloWorld.hs:29:43:
    No instance for (MonadReader
                       HelloWorldState (Query HelloWorldState))
      arising from a use of `ask'
    Possible fix:
      add an instance declaration for
      (MonadReader HelloWorldState (Query HelloWorldState))
    In a stmt of a 'do' block: HelloWorldState string <- ask
    In the expression:
      do { HelloWorldState string <- ask;
           return string }
    In an equation for `queryState':
        queryState
          = do { HelloWorldState string <- ask;
                 return string }

我做错了什么?如何让它发挥作用?

我正在使用 酸状态-0.6.4, ghc-7.4.2, debian-6.0.5 (amd64)

谢谢, 尤拉斯

添加: 看起来它在 ghc-7.4.1 中工作,但在 ghc-7.4.2 中不起作用。有人可以同时编译吗?

我尝试重新安装酸性状态,但没有帮助。 ghc-7.4.2 中的错误或我的环境 ID 已损坏。

最佳答案

好吧,我终于解决了。

问题在于安装了两个不同的 mtl 版本。隐藏错误的东西就解决了一切。

有趣的是我是如何得到它的:)

Prelude Data.Acid Control.Monad.State> :i Update
newtype Update st a
  = acid-state-0.6.4:Data.Acid.Common.Update {acid-state-0.6.4:Data.Acid.Common.unUpdate :: transformers-0.2.2.0:Control.Monad.Trans.State.Lazy.State
                                                                                              st a}
    -- Defined in `acid-state-0.6.4:Data.Acid.Common'
instance Monad (Update st)
  -- Defined in `acid-state-0.6.4:Data.Acid.Common'
instance Functor (Update st)
  -- Defined in `acid-state-0.6.4:Data.Acid.Common'
Prelude Data.Acid Control.Monad.State>

Control.Monad.State 重新导出 State,但您可以看到 ghci 仍然显示 transformers-0.2.2.0:Control.Monad.Trans.State。 Lazy.State 完全合格。

关于haskell - Acid-state:更新的 MonadState 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11068272/

相关文章:

haskell - 让 Cabal 使用 GHC 6.12.1

Haskell:多个文件的酸性状态?

haskell - 我需要在 Haskell 中显示 AVL 树的帮助

haskell - 使用 sortByFst 时出错 : Variable not in scope

haskell - 从 Q monad 中提取值(value)环境

haskell - 没有模板 haskell 的酸态方便包装器?

haskell - 即使我的应用程序不访问旧数据,GHC 运行时也会访问旧数据吗?

haskell - 删除对重复 Haskell

multithreading - Haskell/GHC 每线程内存成本