3

ScottyでWeb アプリの作成を開始しようとしていますが、サーバーを実行しようとすると依存関係の競合が発生します。これが私のコードです:

{-# LANGUAGE OverloadedStrings #-}
module Site where

import Web.Scotty
import Control.Monad.IO.Class
import qualified Data.Text.Lazy.IO as T

-- Controllers
indexController :: ActionM ()
indexController = do
    index <- liftIO $ T.readFile "public/index.html"
    html index

routes :: ScottyM ()
routes = do
    get "/" indexController

main :: IO ()
main = do
    scotty 9901 routes

を使用して実行するとrunhaskell Site.hs、次のエラーが発生します。

Site.hs:12:10:
    Couldn't match expected type `text-0.11.2.3:Data.Text.Lazy.Internal.Text'
                with actual type `Data.Text.Lazy.Internal.Text'
    In the first argument of `html', namely `index'
    In a stmt of a 'do' block: html index
    In the expression:
      do { index <- liftIO $ T.readFile "public/index.html";
           html index }

を使用cabal list textすると、バージョン0.11.2.30.11.3.1がインストールされていることがわかり0.11.3.1ますが、デフォルトです。Scotty'sは、パッケージが である必要があるとscotty.cabal指定しています。これは、上記のコードが機能するように思えます。この種のエラーの回避策はありますか?text>= 0.11.2.3

4

1 に答える 1

5

エラーメッセージ

Site.hs:12:10:
    Couldn't match expected type `text-0.11.2.3:Data.Text.Lazy.Internal.Text'
                with actual type `Data.Text.Lazy.Internal.Text'

scotty、パッケージのバージョン 0.11.2.3 を使用してコンパイルされたtextが、runhaskell の呼び出しでバージョン 0.11.3.1 を使用することを選択したことを意味します (それが最新であり、別のバージョンを使用するように指示していないため)。2 つの異なるパッケージ バージョンの (遅延)Text型は、GHC に関する限り、2 つの完全に異なる型であるため、ライブラリをtextコンパイルしてコードを実行するために使用した正確なバージョンを使用する必要があります。scotty

runhaskell -package=text-0.11.2.3 Site.hs

動作するはずです。textモジュールをコンパイルする場合、直接または Cabal 経由で、正しいバージョンの を使用するように GHC に指示する必要もあります。

別のオプションはscotty、新しいtextバージョンに対して再コンパイルすることです。

于 2013-07-29T14:36:20.853 に答える