2

新手玩haskell 堆栈脚本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.hsturtle.sh. 但是我没有为haskell 突出显示语法。

如果我将其重命名为something-other.hs. 但随后 Haskero (VSCode) 抱怨import Turtle以下行:Couldn't guess that module name. Does it exist?

我在这里缺少什么?在 Windows 上运行 git bash。

4

1 回答 1

3

显然,您需要为脚本指定一个与运行代码的模块名称不同的名称,它将自动派生自它,现在它将与导入的Turtle模块冲突。将其重命名为turtlescript.hs然后

#!/usr/bin/env stack
-- stack --resolver lts-11.2 script --package turtle

{-# LANGUAGE OverloadedStrings #-}

import Turtle

main :: IO ()
main = echo "Hello!"

为我工作。

于 2018-03-29T10:24:43.977 回答