2

作業中のパッケージにテストを追加しようとしています (スタックを使用しています)。この時点まで、すべてがうまくいきました。私は次のバージョンを実行しています(私の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

これは、ビルドまたはテストしようとしたときにスタック/キャバルが与えるエラーです:

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

その 44 は上記の build-depends 行です。

ここで何が起きてるの?私は Cabal User Guide に従いましたが、私の google-fu は何も表示しませんでした。cabal ファイルの残りの部分は、参照用にここにリンクされています。

それが役立つ場合、私のシステムはubuntu 14.04 LTSです。

4

1 に答える 1

2

最後の行は次のようになります。

                 , HTTP

ではありませんHTTP-4000。おそらくあなたがしたい, HTTP >= 4000

ここに問題に関する詳細情報があります...

Cabalこれは、パッケージ名を解析するためのライブラリ内のコードです(リンク)

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、egaeson-0.10.0.0を受け入れていましたが、後にこれは関係演算子の使用を要求するように変更されましたaeson == 0.10.0.0

常に関係演算子を使用するようになったので、パッケージ名にすべて数値コンポーネントを使用できるようになる可能性があります。

いずれにせよ、foo-123x2 番目のコンポーネントがすべて数値ではないため、次のようなものは有効なパッケージ名です。

于 2015-09-24T00:21:31.213 に答える