首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Haskell依赖冲突

Haskell依赖冲突
EN

Stack Overflow用户
提问于 2013-07-29 14:25:54
回答 1查看 382关注 0票数 3

我一直在尝试用斯科蒂编写一个web应用程序,但当我试图运行服务器时,我遇到了依赖冲突。这是我的密码:

代码语言:javascript
复制
{-# 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运行它时,我得到以下错误:

代码语言:javascript
复制
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的scotty.cabal指定text包必须是>= 0.11.2.3,在我看来,上面的代码应该可以工作。这种错误有什么解决办法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-29 14:36:20

错误信息

代码语言:javascript
复制
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是使用text包的0.11.2.3版本编译的,但是对runhaskell的调用选择使用0.11.3.1版本(因为这是最新的版本,您还没有告诉它使用不同的版本)。对于GHC来说,两个不同包版本的(惰性) Text类型是两种完全不同的类型,因此,您必须使用text的确切版本来编译scotty库来运行代码。

代码语言:javascript
复制
runhaskell -package=text-0.11.2.3 Site.hs

应该行得通。如果编译该模块,还需要告诉GHC直接或通过Cabal使用正确版本的text

另一种选择是根据较新的scotty版本重新编译text

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17926608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档