对多个"主"进行类型检查

  • 本文关键字:类型 haskell ghc
  • 更新时间 :
  • 英文 :


我有一个带有几个可执行文件(测试,基准等)的Haskell库,总共约为六个。当我在库中进行一些重构时,我通常需要对每个可执行文件进行一些小更改。

在当前的工作流程中,我分别编译每个可执行文件(例如,使用GHCI)并修复每个可执行文件。这很乏味,因为我必须输入到每个可执行文件的路径,而且必须重新加载所有(非常大的)库,即使在GHCI中,这些库也需要一些时间。

我第一个解决此问题的想法是创建一个单个虚拟模块,该模块导入可执行的"主"模块。但是,这(当然)要求"主"模块具有module Executable1 where ...之类的模块名称。但是现在,Cabal在编译可执行文件时抱怨它找不到一个称为" MAIN"的模块(尽管在每个可执行文件中明确列出了" Main-is",但每个可执行文件都列出了" Main-is"。)

我也尝试了ghci Exec1.hs Exec2.hs ...,但它抱怨module ‘main@main:Main’ is defined in multiple files

是否有一种简单的方法可以同时使用GHCI加载多个"主"模块,以便我可以同时进行打字?

Cabal的main-is选项仅告诉Cabal它应该将其传递给GHC的文件名。Cabal不在乎其模块名称。

GHC本身也有一个也称为-main-is的标志,在此处记录,该标志告诉编译器哪个模块main函数。

所以这有效:

executable foo
  main-is: Foo.hs
  ghc-options: -main-is Foo

当然Foo.hs应从module Foo where…开始,并导出main。像往常一样,模块名称和文件名需要匹配。

这样,所有可执行文件都可以具有不同的模块名称,并且您可以将它们全部加载到GHCI中。

如果您还想更改主函数的名称,请写ghc-options: -main-is Foo.fooMain。我猜您什至可以让所有可执行文件具有相同的模块,但是不同的 main -functions this。

相关内容

  • 没有找到相关文章

最新更新