2012-02-03 2 views
4

Я пытаюсь получить код this для компиляции в моей системе. Когда я пытаюсь скомпилировать модуль чата с ghc Chat.hs, GHC дает мне это:Пример использования Yesod wai-eventsource. Проблема с зависимостью пакета?

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 Platform, как это:

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

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

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

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 

Где Йесод-0.9.4.1 требует Wai == 0.4. * И Wai-EventSource-1.0.0 требуется WAI> = 1.0.

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


Edit:

Я уничтожил ~/.ghc (или на самом деле следовал более строгий подход с учетом here, на всякий случай) и пытался установить пакеты с одним 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 

До этого (с Йесод и вай-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 
+0

Как правило, часто рекомендуется устанавливать пакеты, которые должны работать вместе с одной командой 'cabal install', например' cabal install yesod wai-eventsource'. Это заставляет Cabal попытаться выбрать одну версию каждого пакета, чтобы все они работали вместе. При установке отдельно вы иногда устанавливаете несколько версий пакета, вызывая такие проблемы. – hammar

ответ

3

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

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

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

+0

Если я запустил команду 'ghc-pkg unregister wai-eventsource-1.0.0 -force', последующий' ghc Chat.hs' приводит к ошибке 'Не удалось найти модуль' Network.Wai.EventSource''. Как скрывать необходимые пакеты, помогите скомпилировать этот модуль? – dmb

+0

У вас не установлена ​​* версия * wai-eventsource *. Вот почему я рекомендовал «cabal install yesod wai-eventsource». –

+0

Да, но, как уже упоминалось в моем отредактированном вопросе выше, один вызов, как было предложено, приводит к неразрешенным зависимостям, поскольку ** оба ** (wai/warp) == 0.4. * И (wai/warp)> = 1.0.0 необходимы. Нет версии до wai-eventsource-1.0.0 на хаке, если это то, что вы имеете в виду. – dmb

Смежные вопросы