将Haskell GHCi输出重定向到文本文件

Anc*_*end 2 file-io executable haskell cmd exe

可能重复:将
Haskell GHCi命令结果输出到txt文件

我是Haskell的新手,正在尝试将测试用例的输出结果重定向到文本文件。现在,它的设置方式AddAllTestCases.hs包含了我需要运行的所有测试用例,以测试我创建的功能。我通过加载AddAllTestCases.hs然后在GHCi上运行测试用例,然后只需键入main并按Enter。这会导致测试用例输出结果完美地打印在GHCi内部。

因为存在数百个测试用例,所以我需要将输出结果重定向到文本文件。

尝试1:

writeFile "myoutput.txt" $ show $ main
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

No instance for (Show(IO())) arising from a use of show

尝试CMD中的#2(尝试创建可执行文件,然后将可执行结果输出到文本文件):

ghc --make AddAllTests.hs -o testResults.exe

这给了我以下错误:

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

这很奇怪,因为当我使用GHCi(尝试#1)并输入main它时,它会完美地执行所有操作(我认为这意味着存在一个主模块)?

我非常感谢将测试用例结果重定向到文本文件的任何帮助。

提前谢谢了!

Dan*_*her 5

您需要一个Main模块(和一个main动作)来生成可执行文件。您可以将模块重命名为Main,也可以Main在命令行上指定要考虑的模块,

ghc --make -main-is AddAllTests AddAllTests.hs -o testResults.exe
Run Code Online (Sandbox Code Playgroud)

产生没有名为模块的可执行文件Main

没有编译的方法是

ghc AddAllTests.hs -e "main" > testResults.txt
Run Code Online (Sandbox Code Playgroud)

另一种方法是拥有一个文件,其中仅列出所有测试用例,

3 + 2 :: Rational
reverse "foobar"
:q
Run Code Online (Sandbox Code Playgroud)

ghci使用重定向的输入和输出运行

ghci < testCases > testResults.txt
Run Code Online (Sandbox Code Playgroud)