Как ghci запускает функции?

Рейтинг: 1Ответов: 1Опубликовано: 20.02.2023

Я пришел с C#, где есть функция Main, которая является entry point. В новых версиях можно Main не писать, он подставляется автоматически

Теперь к хаскелю, тут тоже есть main, который выполняет точно такую же функцию. Если запускать через ghc, то будет вызываться main, но в хаскеле есть еще ghci, который позволяет вызывать напрямую функции.

например, ghci anotherF вызывает функцию anotherF. Мне немного непонятно, как происходит такая компиляция без вызова main. Или main все-таки вызывается, но неявно?

Ответы

▲ 0Принят
$ ghci anotherF

загружает исходный файл anotherF.hs, компилирует его, и, не выполняя никаких дальнейших действий, ждет пользовательского ввода. Функция main не вызывается, и может отсутствовать в таком файле совсем. Значения переменных остаются невычисленными, пока не будут запрошены пользователем.

ghci в отличие от компилятора ghc - интерактивная среда, которая позволяет "пощупать" переменные и поприменять функции (по умолчанию в режиме интерпретации) из исходного файла, не запуская его на выполнение.

Что-то похожее есть в интерпретаторе python с ключом -i, но в отличие от python, где каждая строчка программы - инструкция, и должна быть выполнена перед тем как управление передастся пользователю, в Haskell - это список определений, которые становятся важны только когда к ним обращаются.