2012-06-17 34 views
4

Я пытаюсь acid-state. В documentation указано, что Update st является экземпляром MonadState st. Я пробовал разные вещи, но мой компилятор не хочет видеть, что :(Я попытался HelloWorld.hs от examples, но получил тот же вопрос:Кислотное состояние: экземпляр MonadState для обновления

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)

Спасибо, Юрась

ADDED: Похоже, что он работает в ghc-7.4.1 и не работает в ghc-7.4.2. Может ли кто-нибудь компиляторы?

Я попытался переустановить кислотное состояние, но это не помогло. Либо ошибка в ghc-7.4.2, либо мой идентификатор среды сломан.

ответ

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.State реэкспорта State, но вы можете видеть, что GHCi все еще показывает transformers-0.2.2.0:Control.Monad.Trans.State.Lazy.State полное.