如何以解释模式运行Haskell文件

84

我听说你可以解释Haskell文件(我认为这意味着它们会像Ruby/Python/Perl一样工作)。然而,我找不到GHC的命令行选项来执行此操作。无论如何,它总是要编译我的文件。我也看了一下GHCi,但它总是将我导入到repl。

基本上,我想只需要做ghc -i MyFile.hs(其中-i是我虚构的标志,我假装它与解释模式相关),并执行以便我可以在尝试想法和学习时获得快速反馈。


1
有很多关于ghci值得喜欢的地方:它非常容易测试程序的小部分。我个人习惯使用ghci测试东西。您仍然可以通过键入“main”(或者如果需要传递命令行参数,则使用“:main”)来运行顶层的“main”操作。 - Daniel Wagner
4个回答

138
$ runhaskell MyFile.hs

或者,你可以使用runghc命令(它们是同一个东西)。ghci MyFile.hs也会启动一个交互式REPL会话,并加载MyFile.hs文件,但如果您想运行一个主程序,则应该使用runhaskell命令。

最好习惯性地在GHCi中将程序的各个部分作为独立单元进行测试,而不是每次都运行整个程序。当然,对于较短的脚本,直接运行整个程序是最简单和最容易的方法。


4
出于某种原因(OSX 上的 haskell-platform),runhaskell 不在我的路径上,但 runghc 是存在的。(所以提到 runghc 算是加分项) - derekv
1
我知道这个线程已经关闭很久了,但是runhaskell解释器是否进行了JIT编译? - nbroeking

42

你可以使用以下脚本:

#!/usr/bin/env runhaskell
main = putStrLn "hello world"

将文件设为可执行(即 chmod +x haskell_script),就可以像运行其他shell脚本一样运行它。


5
不完全像其他的shell脚本。如果最后一个被执行的表达式返回值不是(), runhaskell会自动输出该值,就像GHCi一样。这种情况在使用ghc正常编译后生成的可执行文件中不会发生。 - Mark Reed
@MarkReed 你能给个例子吗? - Linus Arver
我可能能够想出一种人工的解决方案,但我很难这样做。这不是一个实际的问题,因为你希望大多数脚本在最后执行某种IO操作。我只是认为值得注意。 - Mark Reed

12

在终端中运行ghci打开GHC解释器,然后键入:load example.hs加载文件。更多详细信息请参见此链接


2
要运行写在文件中的代码,比如说myfile.txt,其中包含在GHC解释器中可用的简单代码行,如下所示:
let a = 0 in a:[1,2]
let x = [1,2] in x ++ [3,4]

您可以做以下事情:

ghc -e ':script myfile.txt'

编辑

在Windows系统中,必须使用双引号:

ghc -e ":script myfile.txt"

相反,您也可以打开 GHCi 并执行 :script myfile.txt


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接