如何使用ghci加载没有.hs扩展名的runhaskell脚本?

时间:2011-11-18 04:53:27

标签: haskell ghci runhaskell

我在haskell中编写了一个名为testscript的脚本,其代码如下:

#!/usr/bin/env runhaskell

main = putStrLn "hello"

使脚本可执行后,我可以使用./testscript运行它。但是,当我尝试使用ghci加载脚本时(即使用:l testscript),我收到错误

target `testscript' is not a module name or a source file

如果我将testscript重命名为testscript.hs,并尝试再次使用ghci加载,则会收到错误

testscript.hs:1:0:  error: invalid preprocessing directive #!
phase `C pre-processor' failed (exitcode = 1)

如果我删除了shebang线,它可以正常工作。但是,必须在脚本中添加.hs扩展名,删除顶行,然后删除.hs扩展名,并在每次我想在ghci中尝试脚本时添加shebang行是繁琐的(其中每次我想改变它都很常见)。有更简单的方法吗?

我在Mac OS X 10.6.8下使用ghc版本7.0.3

1 个答案:

答案 0 :(得分:10)

您可以使用-x选项告诉GHCi(或GHC),将所有后续文件视为具有指定的扩展名。

似乎没有任何方法可以在GHCi中指定此选项(与:load一起使用),但是如果需要,可以使用的解决方法是创建一个{{1}的符号链接扩展和加载。

shebang行的第二个问题是由于某些原因在源文件上运行C预处理器引起的(我在Ubuntu上的旧GHC安装不会这样做)。您可以使用.hs选项禁用此功能。

因此,对于您的情况,这应该在命令行中起作用:

-XNoCPP