玩haskell stack scripting和turtle的新手。
创建了一个文件夹stack-scripts
。如果看起来不错,那么我将创建一些haskell实用程序来替换bash脚本。
创建了一个名为turtle.hs
的文件,其中包含以下文本:
#!/usr/bin/env stack
-- stack --resolver lts-11.2 script
{-# LANGUAGE OverloadedStrings #-}
import Turtle
main = echo "Hello!"
制作了
chmod +x turtle.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
行:Couldn't guess that module name. Does it exist?
我错过了什么?在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/