类型检查多个'Main's
Typechecking multiple 'Main's
我有一个 Haskell 库,其中包含几个可执行文件(测试、基准测试等),总共大约六个。当我在库中进行一些重构时,我通常需要对每个可执行文件进行一些小的更改。
在我当前的工作流程中,我分别编译每个可执行文件(例如,使用 GHCi)并修复每个文件。这很乏味,因为我必须输入每个可执行文件的路径,而且必须重新加载所有(非常大的)库,即使使用 GHCi 也需要一些时间。
我解决这个问题的第一个想法是创建一个导入可执行 "Main" 模块的虚拟模块。但是,这(当然)要求 "Main" 模块具有类似 module Executable1 where ...
的模块名称。但是现在 cabal 在编译可执行文件时抱怨找不到名为 "Main" 的模块(尽管在每个可执行文件的 cabal 文件中明确列出了 "main-is"。)
我也试过 ghci Exec1.hs Exec2.hs ...
,但它抱怨 module ‘main@main:Main’ is defined in multiple files
。
有没有一种简单的方法可以使用 GHCi 一次加载多个 "Main" 模块,以便我可以同时对它们进行类型检查?
Cabal 的 main-is
选项只告诉 Cabal 它应该传递给 GHC 的文件名。 Cabal 不关心它的模块名称。
GHC 本身有一个标志,也称为 -main-is
、documented here,它告诉编译器哪个模块包含 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
。我猜你甚至可以让所有可执行文件都具有相同的 module 但不同的 main
-functions 这种方式。
我有一个 Haskell 库,其中包含几个可执行文件(测试、基准测试等),总共大约六个。当我在库中进行一些重构时,我通常需要对每个可执行文件进行一些小的更改。
在我当前的工作流程中,我分别编译每个可执行文件(例如,使用 GHCi)并修复每个文件。这很乏味,因为我必须输入每个可执行文件的路径,而且必须重新加载所有(非常大的)库,即使使用 GHCi 也需要一些时间。
我解决这个问题的第一个想法是创建一个导入可执行 "Main" 模块的虚拟模块。但是,这(当然)要求 "Main" 模块具有类似 module Executable1 where ...
的模块名称。但是现在 cabal 在编译可执行文件时抱怨找不到名为 "Main" 的模块(尽管在每个可执行文件的 cabal 文件中明确列出了 "main-is"。)
我也试过 ghci Exec1.hs Exec2.hs ...
,但它抱怨 module ‘main@main:Main’ is defined in multiple files
。
有没有一种简单的方法可以使用 GHCi 一次加载多个 "Main" 模块,以便我可以同时对它们进行类型检查?
Cabal 的 main-is
选项只告诉 Cabal 它应该传递给 GHC 的文件名。 Cabal 不关心它的模块名称。
GHC 本身有一个标志,也称为 -main-is
、documented here,它告诉编译器哪个模块包含 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
。我猜你甚至可以让所有可执行文件都具有相同的 module 但不同的 main
-functions 这种方式。