酸状态:更新的MonadState实例

时间:2012-06-17 01:30:38

标签: haskell ghc acid-state

我正在尝试acid-statedocumentation表示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 }

我做错了什么?如何使它工作?

我正在使用 acid-state-0.6.4ghc-7.4.2debian-6.0.5(amd64)

谢谢, Yuras

增加: 看起来它在ghc-7.4.1中有效,但在ghc-7.4.2中不起作用。任何人都可以编译吗?

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

1 个答案:

答案 0 :(得分:3)

好的,我终于解决了。

问题在于安装了两个不同的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完全合格。