Йесод вай-события источник пример. Проблема зависимости пакета? - PullRequest
4 голосов
/ 03 февраля 2012

Я пытаюсь получить этот пример кода для компиляции в моей системе. Когда я пытаюсь скомпилировать модуль чата с ghc Chat.hs, ghc дает мне следующее:

Chat.hs:76:39:
    Couldn't match expected type `Network.Wai.Request'
                with actual type `wai-0.4.3:Network.Wai.Request'
    In the second argument of `eventSourceApp', namely `req'
    In the second argument of `($)', namely `eventSourceApp chan req'
    In a stmt of a 'do' expression:
        res <- lift $ eventSourceApp chan req

Я нахожусь на OS X Snow Leopard и прояснил (все?) Кроме платформы Haskell, как это:

rm -r ~/.cabal
rm -r ~/.ghc
rm -r ~/Library/Haskell

и заново установил yesod и wai-eventsource из hackage.

Насколько я понимаю, ошибка связана с проблемой зависимости.

    wai
    Synopsis: Web Application Interface.
    Default available version: 1.0.0
    Installed versions: 0.4.3, 1.0.0
    Homepage: https://github.com/yesodweb/wai
    License:  BSD3

Где yesod-0.9.4.1 требует wai == 0.4. *, А wai-eventsource-1.0.0 требует wai> = 1.0.

Итак, мой вопрос будет таким: возможно ли заставить этот пример (с официальными выпусками yesod) работать прямо сейчас? Со всеми изменениями проект yesod проходит через банкомат? Должен ли я быть более точным в отношении версий, которые пытаюсь установить, и если да, то как?


Редактировать:

Я уничтожил ~/.ghc (или фактически следовал более строгому подходу, указанному здесь , на всякий случай) и попытался установить пакеты с помощью одного cabal install yesod wai-eventsource в результате (неполно):

Resolving dependencies...
cabal: cannot configure yesod-0.9.4.1. It requires wai ==0.4.* and warp ==0.4.*
For the dependency on wai ==0.4.* there are these packages: wai-0.4.0,
wai-0.4.1, wai-0.4.2 and wai-0.4.3. However none of them are available.
wai-0.4.0 was excluded because wai-eventsource-1.0.0 requires wai >=1.0
...
wai-0.4.3 was excluded because wai-eventsource-1.0.0 requires wai >=1.0
For the dependency on warp ==0.4.* there are these packages: warp-0.4.0,
warp-0.4.0.1, warp-0.4.1, warp-0.4.1.1, warp-0.4.1.2, warp-0.4.2, warp-0.4.3,
warp-0.4.3.1, warp-0.4.4, warp-0.4.5, warp-0.4.6, warp-0.4.6.1, warp-0.4.6.2
and warp-0.4.6.3. However none of them are available.
warp-0.4.0 was excluded because wai-eventsource-1.0.0 requires warp >=1.0
...
warp-0.4.6.3 was excluded because wai-eventsource-1.0.0 requires warp >=1.0

До этого (с установкой yesod и wai-eventsource отдельно) я пробовал ghc -hide-package wai-1.0.0 Chat.hs, в результате

Chat.hs:77:39:
Couldn't match expected type `wai-1.0.0:Network.Wai.Request'
            with actual type `Network.Wai.Request'
In the second argument of `eventSourceApp', namely `req'
In the second argument of `($)', namely `eventSourceApp chan req'
In a stmt of a 'do' expression:
    res <- lift $ eventSourceApp chan req

1 Ответ

3 голосов
/ 04 февраля 2012

Я думаю, вам нужно отменить регистрацию (или скрыть) wai 1.0.0.Текущий Yesod использует wai 0.4, откуда исходит несоответствие.(Как только выйдет более новый Yesod, эта проблема исчезнет.)

Кроме того, вы можете снова стереть папку ~ / .ghc и запустить cabal install yesod wai-eventsource, что должно автоматически установить только совместимые версии.*

Редактировать : Вам также необходимо скрыть источник wai-events и, возможно, несколько других.И самый простой подход - запустить ghc-pkg unregister wai-eventsource-1.0.0 --force.

...