gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 14:32:35 27 4
gpt4 key购买 nike

我在 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 扩展名并每次需要时添加 shebang 行,这很乏味在 ghci 中尝试该脚本(每次我想对其进行更改时,这都很常见)。有没有更简单的方法来做到这一点?

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

最佳答案

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

似乎没有任何方法可以从 GHCi 中指定此选项(与 :load 一起使用),但是如果您希望这样做,可以使用一个解决方法,即创建一个符号链接(symbolic link).hs 扩展名并加载它。

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

因此,对于您的情况,这应该可以从命令行运行:

ghci -x hs -XNoCPP testscript

关于haskell - 如何使用 ghci 加载没有 .hs 扩展名的 runhaskell 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8177950/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com