Snap Monad, LiftIO и ghc 7.4.1

Я пытаюсь заставить код, который работал в ghc 7.0.4, работать с 7.4.1.

Мне кажется, что старый способ доступа к IO изнутри Snap moand больше не проверяет тип.

В ghc 7.0.4 документированный способ доступа к IO компилируется.

a :: Snap ()
a = liftIO fireTheMissiles

http://hackage.haskell.org/packages/archive/snap-core/0.8.1/doc/html/Snap-Core.html

В GHC 7.4.1,

No instance for (MonadIO Snap)
  arising from a use of `liftIO'
Possible fix: add an instance declaration for (MonadIO Snap)

Мне любопытно, какая привлекательная работа была бы.


person zmanian    schedule 01.06.2012    source источник
comment
Версия GHC не должна влиять на это. Можете ли вы сравнить версии библиотек между вашей установкой 7.0 и 7.4? Попробуйте ghc-pkg-7.0.4 list snap-core и ghc-pkg-7.4.1 list snap-core.   -  person Daniel Wagner    schedule 01.06.2012
comment
Это очень странно. Все типы, подобные обработчикам Snap, наверняка имеют экземпляры MonadIO. Сюда входят Snap, Handler и Initializer (хотя последний не является типом, подобным обработчику). Можете ли вы вставить свой код куда-нибудь, чтобы мы могли попробовать и запустить его?   -  person ozataman    schedule 01.06.2012
comment
@DanielWagner ghc-pkg-7.0.4 список snap-core /usr/local/lib/ghc-7.0.4/package.conf.d /home/zaki/.ghc/x86_64-linux-7.0.4/package.conf .d snap-core-0.8.1 список ghc-pkg snap-core /usr/local/lib/ghc-7.4.1/package.conf.d /home/zaki/.ghc/x86_64-linux-7.4.1/ package.conf.d snap-core-0.8.1   -  person zmanian    schedule 01.06.2012
comment
@zmanian Ну, я не могу это воспроизвести. У меня установлены GHC 7.4.1 и snap-core-0.8.1, и ghci не жалуется на :t liftIO (return ()) :: Snap (). Так что твоя проблема в другом. Дайте нам достаточно кода, чтобы мы могли воспроизвести проблему, и мы постараемся помочь вам понять ее.   -  person Daniel Wagner    schedule 01.06.2012
comment
Я понял, что происходит. У меня какой-то кошмар с зависимостями происходит в моей клике после обновления до предварительной версии платформы haskell. Я должен быть в состоянии это исправить.   -  person zmanian    schedule 01.06.2012


Ответы (1)


Я предполагаю, что у вас есть конфликтующие версии какого-то пакета (вероятно, transformers). Snap, скорее всего, создан для другой версии (возможно, 0.2.2), а вы пытаетесь использовать версию 0.3. В результате нет экземпляра для MonadIO, который у вас есть в области действия (из 0,3). Это всего лишь предположение, но я видел одно и то же несколько раз.

Один из самых простых способов избежать этой ситуации — кабализировать свой код. cabal предупредит вас, если вы попытаетесь использовать разные версии одного и того же пакета.

person Michael Snoyman    schedule 01.06.2012