我在尝试acid-state。文档声明Update st是MonadState st的一个实例。我尝试了不同的东西,但我的编译器不想看到:(我尝试了来自示例的示例,但是得到了同样的问题:
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,ghc-7.4.2,debian-6.0.5 (amd64)
谢谢你,尤拉斯
补充道:看起来像在ghc-7.4.1中工作,而在ghc-7.4.2中不工作。有谁能同时编译吗?
我试过重新安装酸状态,但没什么用。要么是ghc-7.4.2中的一个bug,要么是我的环境被破坏了。
发布于 2012-06-17 14:55:00
好吧,我终于解决了。
问题是安装了两个不同的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完全合格。
https://stackoverflow.com/questions/11068272
复制相似问题