2014-02-17 5 views
0

Я пытаюсь следовать this post, чтобы обслуживать статические файлы с scotty. Так что у меня есть этот небольшой скрипт:Тип несоответствия в Network.Wai.Middleware

{-# LANGUAGE OverloadedStrings #-} 

import Web.Scotty 
import Network.Wai.Middleware.Static 

import Data.Monoid (mconcat) 

main = scotty 3000 $ do 
    middleware $ staticPolicy (noDots >-> addBase "static") 
    get "/:word" $ do 
    beam <- param "word" 
    html $ mconcat ["<h1>Scotty, ", beam, " me up!</h1>"] 

Запуск GHC дает следующее сообщение об ошибке:

server.hs:9:16: 
    Couldn't match type `Network.Wai.Internal.Request' 
        with `wai-1.4.0.1:Network.Wai.Request' 
    Expected type: wai-1.4.0.1:Network.Wai.Middleware 
     Actual type: Network.Wai.Middleware 
    In the return type of a call of `staticPolicy' 
    In the second argument of `($)', namely 
     `staticPolicy (noDots >-> addBase "static")' 
    In a stmt of a 'do' block: 
     middleware $ staticPolicy (noDots >-> addBase "static") 

Теперь я не понимаю, как интерпретировать wai-1.4.0.1:Network.Wai.Middleware против Network.Wai.Middleware. Это проблема с версией? Я попытался проверить установленную библиотеку, но я не мог найти никакого конфликта.

Что я должен проверить, чтобы решить эту проблему?

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

Бег ghc-pkg list wai дает мне:

C:\perso\prog\haskell\orgmode\orgmodeserver\src\hs>ghc-pkg list wai 
WARNING: there are broken packages. Run 'ghc-pkg check' for more details. 
C:/Program Files (x86)/Haskell Platform/2013.2.0.0\lib\package.conf.d: 

C:\Users\sberg\AppData\Roaming\ghc\i386-mingw32-7.6.3\package.conf.d: 
    wai-1.4.0.1 
    wai-2.0.0 

Запуск ghc-pkg check (пропуская кучу предупреждений):

The following packages are broken, either because they have a problem 
listed above, or because they depend on a broken package. 
scion-browser-0.2.17 
miamtime-0.0.0 
TestYes-0.0.0 
yesod-platform-1.2.2 
yesod-1.2.1.1 
yesod-auth-1.2.0.2 
yesod-form-1.3.0.1 
+0

Это похоже на проблему с версией. Что такое вывод 'ghc-pkg list wai'? – user2407038

+0

@ user2407038 см. Мое редактирование. Означает ли это, что у меня установлено 2 wai lib? – Simon

+0

Точно. Есть, вероятно, десяток различных способов исправить это, но самым простым решением является отменить регистрацию всех сломанных пакетов, отменить регистрацию обеих версий 'wai' и снова установить все пакеты, убедившись, что вы не устанавливаете 2 версии' wai'. Используйте флаг '--dry-run', чтобы убедиться, что' cabal install' не устанавливает старую версию. Если он решит, что ему нужно 1.4 и не может использовать 2.0, вам, возможно, придется использовать более старые версии некоторых пакетов. – user2407038

ответ

2

Есть, вероятно, десятки различных способов исправить это , но самым простым решением является отмена регистрации всех сломанных пакетов, отмените регистрацию обеих версий wai и установите все пакеты снова, убедившись, что вы не устанавливаете 2 версии wai. Используйте флаг -dry-run, чтобы убедиться, что установка cabal не устанавливает старую версию. Если он решит, что ему нужно 1.4 и не может использовать 2.0, вам, возможно, придется использовать более старые версии некоторых пакетов.

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