Как ghci запускает функции?
Я пришел с C#, где есть функция Main, которая является entry point. В новых версиях можно Main не писать, он подставляется автоматически
Теперь к хаскелю, тут тоже есть main, который выполняет точно такую же функцию. Если запускать через ghc, то будет вызываться main, но в хаскеле есть еще ghci, который позволяет вызывать напрямую функции.
например, ghci anotherF вызывает функцию anotherF. Мне немного непонятно, как происходит такая компиляция без вызова main. Или main все-таки вызывается, но неявно?
Ответы (1 шт):
$ ghci anotherF
загружает исходный файл anotherF.hs, компилирует его, и, не выполняя никаких дальнейших действий, ждет пользовательского ввода. Функция main не вызывается, и может отсутствовать в таком файле совсем. Значения переменных остаются невычисленными, пока не будут запрошены пользователем.
ghci в отличие от компилятора ghc - интерактивная среда, которая позволяет "пощупать" переменные и поприменять функции (по умолчанию в режиме интерпретации) из исходного файла, не запуская его на выполнение.
Что-то похожее есть в интерпретаторе python с ключом -i, но в отличие от python, где каждая строчка программы - инструкция, и должна быть выполнена перед тем как управление передастся пользователю, в Haskell - это список определений, которые становятся важны только когда к ним обращаются.