微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用第三方依赖编译 Haskell 程序

如何解决使用第三方依赖编译 Haskell 程序

离开一段时间后,我试图再次跳入一些 Haskell。我很久以前写的一段代码包括import qualified Data.MultiMap as MultiMap。由于 Data.MultipMapcontainers 包中,所以当我运行 ghc program.hs 时会出错。我试图基于 How to make a Haskell cabal project with library+executables that still run with runhaskell/ghci? 编写一个 project.cabal 文件。我最近的尝试是

name: project
version: 1.0
executable project
    main-is: project.hs
    build-dependencies:
        base >= 4 && <= 5,containers

现在当我做cabal build project时,我得到

Resolving dependencies...
cabal.exe: Could not resolve dependencies:
[__0] trying: project-1.0 (user goal)
[__1] next goal: project:setup.Cabal (dependency of project)
[__1] rejecting: project:setup.Cabal-3.4.0.0/installed-3.4.0.0 (conflict:
project => project:setup.Cabal>=1.0 && <1.25)
[__1] skipping: project:setup.Cabal-3.4.0.0,project:setup.Cabal-3.2.1.0,project:setup.Cabal-3.2.0.0,project:setup.Cabal-3.0.2.0,project:setup.Cabal-3.0.1.0,project:setup.Cabal-3.0.0.0,project:setup.Cabal-2.4.1.0,project:setup.Cabal-2.4.0.1,project:setup.Cabal-2.4.0.0,project:setup.Cabal-2.2.0.1,project:setup.Cabal-2.2.0.0,project:setup.Cabal-2.0.1.1,project:setup.Cabal-2.0.1.0,project:setup.Cabal-2.0.0.2 (has the same
characteristics that caused the prevIoUs version to fail: excluded by
constraint '>=1.0 && <1.25' from 'project')
[__1] rejecting: project:setup.Cabal-1.24.2.0,project:setup.Cabal-1.24.0.0,project:setup.Cabal-1.22.8.0,project:setup.Cabal-1.22.7.0,project:setup.Cabal-1.22.6.0,project:setup.Cabal-1.22.5.0,project:setup.Cabal-1.22.4.0,project:setup.Cabal-1.22.3.0,project:setup.Cabal-1.22.2.0,project:setup.Cabal-1.22.1.1,project:setup.Cabal-1.22.1.0,project:setup.Cabal-1.22.0.0,project:setup.Cabal-1.20.0.4,project:setup.Cabal-1.20.0.3,project:setup.Cabal-1.20.0.2,project:setup.Cabal-1.20.0.1,project:setup.Cabal-1.20.0.0,project:setup.Cabal-1.18.1.7,project:setup.Cabal-1.18.1.6,project:setup.Cabal-1.18.1.5,project:setup.Cabal-1.18.1.4,project:setup.Cabal-1.18.1.3,project:setup.Cabal-1.18.1.2,project:setup.Cabal-1.18.1.1,project:setup.Cabal-1.18.1,project:setup.Cabal-1.18.0,project:setup.Cabal-1.16.0.3,project:setup.Cabal-1.16.0.2,project:setup.Cabal-1.16.0.1,project:setup.Cabal-1.16.0,project:setup.Cabal-1.14.0,project:setup.Cabal-1.12.0,project:setup.Cabal-1.10.2.0,project:setup.Cabal-1.10.1.0,project:setup.Cabal-1.10.0.0,project:setup.Cabal-1.8.0.6,project:setup.Cabal-1.8.0.4,project:setup.Cabal-1.8.0.2,project:setup.Cabal-1.6.0.3,project:setup.Cabal-1.6.0.2,project:setup.Cabal-1.6.0.1,project:setup.Cabal-1.4.0.2,project:setup.Cabal-1.4.0.1,project:setup.Cabal-1.4.0.0,project:setup.Cabal-1.2.4.0,project:setup.Cabal-1.2.3.0,project:setup.Cabal-1.2.2.0,project:setup.Cabal-1.2.1,project:setup.Cabal-1.1.6,project:setup.Cabal-1.24.1.0 (constraint from
minimum version of Cabal used by Setup.hs requires >=3.4)
[__1] fail (backjumping,conflict set: project,project:setup.Cabal)
After searching the rest of the dependency tree exhaustively,these were the
goals I've had most trouble fulfilling: project:setup.Cabal,project

我缺少什么才能让它发挥作用?我应该怎么做才能编译我的 Haskell 程序?

解决方法

将您的 { "_id": { "$oid": "5fea6e09" },"isActiveTutor": false,"youtubeUrlId": "","name": "rrrr","surname": "rrrrr","email": "u@gmail.com","initials": "","role": "tutor","createdAt": { "$date": "" },"updatedAt": { "$date": { "$numberLong": "" } },"messages": [ { "contentInfo": { "viewed": false,"msg": "22222222ghjk" "createdAt": { "$date": "" } },"_id": { "$oid": "" },"sender": { "$oid": "600333" } },{ "contentInfo": { "viewed": false,"msg": "heloooo","createdAt": { "$date": { "$numberLong": "" } } },"msg": "dfdfdf","sender": { "$oid": "5fea6e09" } } ] } 更改为:

project.cabal

cabal-version: 3.4 name: project version: 1.0 executable project main-is: project.hs build-depends: base >= 4 && <= 5,multimap 选择最新版本的 Cabal 包格式,鉴于您已经在使用 Cabal 3.4,使用它应该没问题。如果未指定,cabal-version: 3.4 默认为非常旧的版本(如最近的版本 the field is mandatory),这使得 the build-type field 默认为 cabal-version 而不是 Custom。反过来,这会导致您得到错误,如 cabal issue #5278 中所述。此外,我已将 Simple 更改为 build-dependencies,将 build-depends 更改为 containers(因为 the latter package 是提供 multimap 的那个)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。