Кислотное состояние: экземпляр MonadState для обновления

Я пытаюсь 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,ghc-7.4.2,debian-6.0.5 (Amd64)

Спасибо Юрас

ДОБАВЛЕНО: Похоже, что он работает в ghc-7.4.1 и не работает в ghc-7.4.2. Может ли кто-нибудь оба компилятора?

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

1 ответ

Решение

Хорошо, я наконец решил это.

Вопрос был с двумя разными 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 Полностью квалифицированный.

Другие вопросы по тегам