Haskell: Ошибка разбора: ожидается заголовок модуля, объявление импорта или объявление верхнего уровня - PullRequest
0 голосов
/ 06 мая 2018

Я сохраняю некоторые команды в скрипте на Haskell в файле .hs, работая над учебником по Haskell. Вот небольшой пример.

fst (1,2)
snd (1,2)

Когда я запускаю эти команды из прелюдии в GHCi, они работают нормально. Когда я пытаюсь скомпилировать файл .hs с этими двумя строками, я получаю следующее:

ch4_test.hs:2:1: error:
    Parse error: module header, import declaration
    or top-level declaration expected.
  |
2 | fst (1,2)
  | ^^^^^^^^^
Failed, no modules loaded.

Я погуглил эту ошибку и не могу найти объяснения, что я делаю неправильно.

Ответы [ 2 ]

0 голосов
/ 08 ноября 2018

От новичка к будущему новичку: интерактивная среда ghci заставит вас поверить, что вы можете поместить некоторые выражения в файл .hs и запустить его (аналогично языкам, таким как swift и ruby). Это не тот случай.

Haskell требуется точка входа с именем main. Цитирование:

Вот простая программа для чтения и печати символа:

main :: IO ()
main =  do c <- getChar
           putChar c

Важно использовать имя main: main определено как точка входа в программу на Haskell (аналогично главной функции в C) и должно иметь тип IO, обычно IO ()

Источник: https://www.haskell.org/tutorial/io.html

0 голосов
/ 06 мая 2018

Вы не можете просто поместить любое выражение в файл hs.

Как говорится в сообщении об ошибке, вам нужно объявление здесь. Например:

main =
    print (fst (1,2)) >>
    print (snd (1,2))
...