Я пытаюсь следовать 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
Это похоже на проблему с версией. Что такое вывод 'ghc-pkg list wai'? – user2407038
@ user2407038 см. Мое редактирование. Означает ли это, что у меня установлено 2 wai lib? – Simon
Точно. Есть, вероятно, десяток различных способов исправить это, но самым простым решением является отменить регистрацию всех сломанных пакетов, отменить регистрацию обеих версий 'wai' и снова установить все пакеты, убедившись, что вы не устанавливаете 2 версии' wai'. Используйте флаг '--dry-run', чтобы убедиться, что' cabal install' не устанавливает старую версию. Если он решит, что ему нужно 1.4 и не может использовать 2.0, вам, возможно, придется использовать более старые версии некоторых пакетов. – user2407038