haskell - Cabal 无法解析测试套件 block 中的构建依赖项

标签 haskell cabal haskell-stack

我正在尝试向我正在处理的包添加测试(我正在使用堆栈)。一切顺利,直到此时。我正在运行以下版本(与我的 ubuntu 一样最新):

cabal-install version 1.22.6.0
using version 1.22.4.0 of the Cabal library

Stack: Version 0.1.4.0, Git revision 3a665fe1bc52776041a1c25cc47734e691805b6c (1724 commits) X86_64

这是有问题的部分:

Test-Suite test-one
  main-is: Test.hs
  type: exitcode-stdio-1.0
  hs-source-dirs: test
  build-depends: base >= 4.7 && < 5
               , scotty >= 0.10.2
               , scotty-login-session
               , text
               , wai
               , wai-extra
               , HUnit
               , HTTP-4000

这是 stack/cabal 在尝试构建或测试时给出的错误:

Unable to parse cabal file <mypackage>.cabal: NoParse "build-depends" 44

44 是上面的构建依赖行。

这里发生了什么?我按照 Cabal 用户指南进行操作,但我的 google-fu 没有发现任何结果。 cabal 文件的其余部分链接为 here供引用。

如果有帮助的话,我的系统是 ubuntu 14.04 LTS。

最佳答案

最后一行应该是:

                 , HTTP

而不是HTTP-4000。也许您需要 ,HTTP >= 4000

这是有关该问题的更多信息...

这是 Cabal 库中用于解析包名称的代码 (link)

instance Text PackageName where
  disp (PackageName n) = Disp.text n
  parse = do
    ns <- Parse.sepBy1 component (Parse.char '-')
    return (PackageName (intercalate "-" ns))
    where
      component = do
        cs <- Parse.munch1 Char.isAlphaNum
        if all Char.isDigit cs then Parse.pfail else return cs
        -- each component must contain an alphabetic character, to avoid
        -- ambiguity in identifiers like foo-1 (the 1 is the version number).

注意最后的评论。也许在某个时候 build-depends: 接受了语法 name-version,例如aeson-0.10.0.0,后来更改为需要使用关系运算符,例如aeson == 0.10.0.0

现在我们总是使用关系运算符,也许可以允许包名称包含全数字组件。

无论如何,像 foo-123x 这样的名称都是有效的包名称,因为第二个组件并不全是数字。

关于haskell - Cabal 无法解析测试套件 block 中的构建依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32751149/

相关文章:

haskell - 如何使用仅显示警告的 cabal 构建重新编译 Haskell

haskell - GHC 有类似 distcc 的工具吗?

haskell - 模板 Haskell 声明中的局部变量

Haskell 惰性 I/O 和关闭文件

haskell - 使受约束的函数成为类型类实例

haskell - 如何处理添加新包依赖项的功能请求

haskell - ResourceT、MonadTrans 实例不可用

haskell - 安装不在 stackage 上但在 hackage 上的包

haskell - 了解Haskell的堆栈程序以及解析器和LTS版本

haskell - 将部门信息隐藏在额外部门链中