Dav*_*ani 8 haskell ghci runhaskell
我在haskell中编写了一个testscript用以下代码命名的脚本:
#!/usr/bin/env runhaskell
main = putStrLn "hello"
Run Code Online (Sandbox Code Playgroud)
使脚本可执行后,我可以使用它来运行它./testscript.但是,当我尝试使用ghci(即with :l testscript)加载脚本时,我收到错误
target `testscript' is not a module name or a source file
Run Code Online (Sandbox Code Playgroud)
如果我重新命名testscript到testscript.hs,并尝试与ghci的加载一遍,我得到的错误
testscript.hs:1:0: error: invalid preprocessing directive #!
phase `C pre-processor' failed (exitcode = 1)
Run Code Online (Sandbox Code Playgroud)
如果我删除shebang线它工作正常.然而,每次我想在ghci中尝试.hs脚本时,必须为脚本添加扩展,删除顶行,然后删除.hs扩展并添加shebang行是很繁琐的(这在每次我想要进行更改时都很常见它).有更简单的方法吗?
我在Mac OS X 10.6.8下使用ghc版本7.0.3
ham*_*mar 10
您可以使用该-x选项告诉GHCi(或GHC)将所有后续文件视为具有指定的扩展名.
似乎没有任何方法可以在GHCi中指定此选项(与...一起使用:load),但是如果需要,可以使用的解决方法是创建带.hs扩展名的符号链接并加载它.
shebang行的第二个问题是由于某些原因在源文件上运行C预处理器引起的(我在Ubuntu上安装的旧GHC不会这样做).您可以使用该-XNoCPP选项禁用此功能.
因此,对于您的情况,这应该从命令行工作:
ghci -x hs -XNoCPP testscript
Run Code Online (Sandbox Code Playgroud)