haskell stack scriptingturtle的新手。
创建了一个文件夹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/

10-11 22:37
查看更多