gpt4 book ai didi

haskell - 对多个 'Main' 进行类型检查

转载 作者:行者123 更新时间:2023-12-02 10:01:17 25 4
gpt4 key购买 nike

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

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

我解决这个问题的第一个想法是创建一个导入可执行“主”模块的虚拟模块。但是,这(当然)要求“主”模块具有类似 module Executable1 where ... 的模块名称。 。但现在 cabal 在编译可执行文件时提示它找不到名为“Main”的模块(尽管在 cabal 文件中为每个可执行文件明确列出了“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-isdocumented 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。我猜你甚至可以让所有可执行文件具有相同的模块,但不同的main-functions

关于haskell - 对多个 'Main' 进行类型检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40944108/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com