新手玩haskell stack scripting和 turtle 。
- 创建了一个文件夹
stack-scripts
。我想如果它看起来不错,那么我会为我创建一些 haskell utils 来替换 bash 脚本。 创建了一个名为
turtle.hs
的文件,其中包含以下文本:#!/usr/bin/env stack -- stack --resolver lts-11.2 script {-# LANGUAGE OverloadedStrings #-} import Turtle main = echo "Hello!"
创建了
chmod +xturtle.hs
并尝试执行它。收到以下错误消息:
turtle.hs:1:1: error: File name does not match module name: Saw: `Main' Expected: `Turtle' | 1 | #!/usr/bin/env stack | ^
如果我将 turtle.hs
重命名为 turtle.sh
,它就会执行其应有的操作。但是我没有 Haskell 的语法突出显示。
如果我将其重命名为 something-other.hs
,它也可以工作。但随后 Haskero (VSCode) 提示 import Turtle
行:无法猜测该模块名称。存在吗?
我在这里缺少什么?在 Windows 上运行 git bash。
最佳答案
显然,您需要为脚本指定一个不同的名称,因为代码运行的模块名称将自动从中派生,现在它将与导入的 Turtle
模块冲突。将其重命名为 turtlescript.hs
,然后
#!/usr/bin/env stack
-- stack --resolver lts-11.2 script --package turtle
{-# LANGUAGE OverloadedStrings #-}
import Turtle
main :: IO ()
main = echo "Hello!"
为我工作。
关于windows - 文件名与模块名不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49553241/