我在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
答案 0 :(得分:10)
您可以使用-x
选项告诉GHCi(或GHC),将所有后续文件视为具有指定的扩展名。
似乎没有任何方法可以在GHCi中指定此选项(与:load
一起使用),但是如果需要,可以使用的解决方法是创建一个{{1}的符号链接扩展和加载。
shebang行的第二个问题是由于某些原因在源文件上运行C预处理器引起的(我在Ubuntu上的旧GHC安装不会这样做)。您可以使用.hs
选项禁用此功能。
因此,对于您的情况,这应该在命令行中起作用:
-XNoCPP