Haskell 如何为Cabal/Stack包指定源文件,而不仅仅是hs源目录/源目录?

Haskell 如何为Cabal/Stack包指定源文件,而不仅仅是hs源目录/源目录?,haskell,testing,cabal,haskell-stack,Haskell,Testing,Cabal,Haskell Stack,我有一个Haskell项目,它是使用Stack(因此是Cabal)构建的。 现在我有src/directory和tests/directory,但我想将测试和源文件混合在一起,这意味着所有内容都将转到src/directory 为此,我需要将testsbuildinfo源文件定义为src/中扩展名为.test.hs的文件。 然而,似乎定义源文件的唯一选择是堆栈中的source dirs或cabal中的hs source dirs,这意味着我必须将src作为source dirs,这似乎是错误的,

我有一个Haskell项目,它是使用Stack(因此是Cabal)构建的。 现在我有src/directory和tests/directory,但我想将测试和源文件混合在一起,这意味着所有内容都将转到src/directory

为此,我需要将
tests
buildinfo源文件定义为src/中扩展名为.test.hs的文件。 然而,似乎定义源文件的唯一选择是堆栈中的
source dirs
或cabal中的
hs source dirs
,这意味着我必须将
src
作为
source dirs
,这似乎是错误的,因为它也捕获了正常的源文件

这是我的软件包的哪一部分。yaml:

tests:
  myapp-test:
    main:                Main.hs
    source-dirs:         test
    ...
我希望它是smth,比如:

tests:
  myapp-test:
    main:                Main.hs
    source-files:         src/**/*.test.hs
    ...

有没有类似的选项,比如源文件,或者其他方法来实现这一点?谢谢

分离
src
测试
dir是惯例,但不是必须的。
hs源目录
默认为

阴谋集团自己找到所有的源文件。 否则会有
额外的源文件

您可以在模块级别进行选择:
公开模块
其他模块
。 您可以将它们用于库和可执行文件

在您的
.cabal
文件中:

  • 每个可执行文件使用一个
    可执行文件
    条目。
    main是带有
    模块main的文件,其中…
  • 每个库使用一个
  • 每个测试应用程序使用一个
    测试套件
    条目

    • 类型是必需的(例如
      类型:exitcode-stdio-1.0
    • main是
      是测试文件
    • ghc选项:-main为
    • 在测试文件中还有一个
阴谋集团的用法:

  cabal new-build
  cabal new-test [<which test>]
  cabal new-run <file without path>
阴谋集团新构建
阴谋集团新试验[]
阴谋集团新运行
深入
distnewstyle
你会发现

  • x
    目录下的可执行文件
  • 测试可执行文件位于
    t
    目录下
  • .so
    文件位于
    l
    目录下
链接:

  • (阴谋集团文件)[
  • 示例项目: (hspec示例)[ (美味阴谋集团示例测试)[
  • 阴谋集团来源:
    *.cabal
    阴谋集团/cabal/doc/buildinfo字段参考。rst

我认为没有一种简单的方法可以做到这一点。我建议您坚持将源代码和测试保存在单独目录中的惯例。如果您想将一小部分包含的模块和测试打包在一起,只需创建另一个库!您能说一下为什么要将文件混合在一个目录中吗?也许我们可以建议一种替代方法,即解决您的问题。@DanielWagner感谢您尝试找到解决方案!我最近一直在使用javascript,并且习惯于将测试文件放在源文件旁边。我以前也在项目中工作过,这些文件被拆分到不同的目录结构中,这样我就可以对两者进行比较。我更喜欢将它们放在源文件旁边iles,因为它更容易找到和打开->我不需要浏览两个并行目录结构。我肯定有优点和缺点,但我发现这是我喜欢/更喜欢的smth。但我很想听到不同的意见。
  cabal new-build
  cabal new-test [<which test>]
  cabal new-run <file without path>