7

背景

我正在 Haskell 中构建一个日志文件解析器。我正在使用堆栈来构建它。运行stack build命令很愉快,我的项目编译。stack test但是,运行会产生以下错误:

parser-test: executable not found

我在错误消息上方看到以下警告,但我不知道如何避免它所指的重定向。

Warning: output was redirected with -o, but no output will be generated because there is no Main module.

相关文件

我还没有编写任何测试,所以测试文件是由stack new. 我的 cabal 文件如下所示:

...
category:            Executable
build-type:          Simple
-- extra-source-files:
cabal-version:       >=1.10

library
hs-source-dirs:      src
exposed-modules:     LogParser
build-depends:       base >= 4.7 && < 5
                    , attoparsec
                    , bytestring
                    , old-locale
                    , time
default-language:    Haskell2010

executable parser-exe
hs-source-dirs:      app
main-is:             Main.hs
ghc-options:         -threaded -rtsopts -with-rtsopts=-N
build-depends:       base
                    , attoparsec
                    , bytestring
                    , old-locale
                    , time
                    , parser
default-language:    Haskell2010

test-suite parser-test
type:                exitcode-stdio-1.0
hs-source-dirs:      test
main-is:             Spec.hs
build-depends:       base
                    , attoparsec
                    , bytestring
                    , hspec
                    , hspec-attoparsec
                    , old-locale
                    , time
                    , parser
ghc-options:         -threaded -rtsopts -with-rtsopts=-N
default-language:    Haskell2010

source-repository head
type:     git
...

我想我遗漏了一些东西,但我找不到我遗漏的东西记录在哪里。

期望的行为

我应该看到堆栈文档Test suite not yet implemented中概述的消息。

4

1 回答 1

4

test/Spec.hs模板文件的内容是:

main :: IO ()
main = putStrLn "Test suite not yet implemented"

您可以在new-template.hsfiles中的Commercialhaskell/stack-templates中看到此内容。

我不确定这module ParserSpec where条线来自哪里(在Github 问题中提出),但它不是模板的一部分。在我的系统上,stack new bar && cd bar && stack test成功。

至于模块要求背后的原因Main:它来自 Cabal 库,据我了解,它是由于 Cabal 支持的其他编译器的限制而添加的。换句话说,GHC 在技术上可以允许此代码编译,但 Cabal 不会传入这些参数以保持与其他编译器的兼容性。

于 2015-09-09T05:37:28.630 回答