5

私はしようとしていacid-stateます。ドキュメントには、それUpdate stがのインスタンスであると記載されていますMonadState st。私は別のことを試しましたが、私のコンパイラはそれを見たくありません:(私は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.4、、 (amd64)ghc-7.4.2を 使用してい ますdebian-6.0.5

ありがとう、ユラス

追加: ghc-7.4.1では機能し、ghc-7.4.2では機能しないようです。誰か両方のコンパイラができますか?

acid-stateを再インストールしようとしましたが、役に立ちませんでした。ghc-7.4.2のバグか、環境IDが壊れています。

4

1 に答える 1

3

わかりました、私はついにそれを解決しました。

この問題は、2 つの異なる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.StatereexportsStateですが、ghci がまだtransformers-0.2.2.0:Control.Monad.Trans.State.Lazy.State完全修飾されていることがわかります。

于 2012-06-17T14:55:00.193 に答える