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") 

가 지금은 Network.Wai.Middlewarewai-1.4.0.1: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'를 등록 해제하고 모든 패키지를 다시 설치하여 두 버전의 'wai'를 설치하지 않도록하는 것입니다. 'cabal install '이 이전 버전을 설치하지 않도록'--dry-run' 플래그를 사용하십시오. 1.4가 필요하고 2.0을 사용할 수 없다고 판단되면 이전 버전의 일부 패키지를 사용해야 할 수도 있습니다. – user2407038

답변

2

아마이 문제를 해결하는 12 개의 다른 방법이있다 , 가장 간단한 해결책은 모든 깨진 패키지를 등록 해제하고, 두 버전의 wai를 설치하고 모든 패키지를 다시 설치하십시오. 2 가지 버전의 wai를 설치하지 않도록하십시오. --dry-run 플래그를 사용하여 Cabal 설치가 이전 버전을 설치하고 있지 않은지 확인하십시오. 1.4가 필요하고 2.0을 사용할 수 없다고 판단되면 이전 버전의 일부 패키지를 사용해야 할 수도 있습니다.

관련 문제