Имя файла не соответствует имени модуля

Новичок играет со скриптами стека на Haskell и черепахой.

  • Создал папку 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, Но потом Хаскеро (VSCode) жалуется на import Turtle линия: Couldn't guess that module name. Does it exist?

Что мне здесь не хватает? Запуск в git bash на Windows.

1 ответ

Решение

Очевидно, вам нужно дать сценарию другое имя, так как имя модуля, в котором выполняется код, будет автоматически получено из него, и теперь оно будет конфликтовать с импортированным Turtle модуль. Переименование его в turtlescript.hs а потом

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

{-# LANGUAGE OverloadedStrings #-}

import Turtle

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

работал на меня.

Другие вопросы по тегам