如何在解释模式下运行Haskell文件


75

有人告诉我您可以解释Haskell文件(我认为这意味着它们将像Ruby / Python / Perl一样工作)。但是,我找不到GHC上的命令行选项。它总是想编译我的文件。也看了GHCi,但它总是使我陷入混乱。

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


1
关于ghci有很多优点:它使测试程序的小部分变得非常容易。我个人只是习惯使用ghci测试事物。您仍然可以main通过键入main(或:main在需要传递命令行参数时使用)来运行顶级操作。
Daniel Wagner

Answers:


126
$ runhaskell MyFile.hs

或者,runghc(它们是同一件事)。ghci MyFile.hs也将在MyFile.hs加载时启动交互式REPL会话,但是如果您要运行主程序,则runhaskell是一种方法。

养成在GHCi中将程序的各个部分作为隔离单元进行测试的习惯是一个好主意,而不是每次都运行整个程序,但是显然,对于较短的脚本,仅运行整个程序是最简单,最容易的。


3
无论出于什么原因(OSX上的haskell平台),runhaskell我都没有走过,而是走了runghc。(因此请+1 runghc
derekv

1
我知道这个线程早已关闭,但是runhaskell解释器jit是否已编译?
nbroeking

39

您可以具有如下脚本:

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

使文件成为可执行文件(即chmod +x haskell_script)后,您可以像运行其他任何shell脚本一样运行它。


4
没有相当像任何其他shell脚本。就像GHCi中一样(),上一次执行的最后一个表达式的返回值(如果不是)将由输出自动输出runhaskell。使用正常编译的实际可执行文件不会发生这种情况ghc
马克·里德

@MarkReed您能举个例子吗?
Linus Arver 2015年

我也许可以提出一个人造的,但我很难做到。这并不是一个实际的问题,因为无论如何,您都希望大多数脚本执行某种IO作为其最终操作。我只是认为这是值得注意的。
马克·里德


1

要运行写在文件中的代码,例如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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.