Есть небольшая разница, да.При нормальной работе ghci принимает одну строку ввода и обрабатывает ее немедленно.Тем не менее, он также имеет «автоматический многострочный» режим, в котором он попытается определить, хотите ли вы ввести несколько строк одновременно, прежде чем обрабатывать их все вместе.Например, в обычном режиме:
> (3 +
<interactive>:1:5: error:
parse error (possibly incorrect indentation or mismatched brackets)
> case () of
<interactive>:2:1: error:
Empty list of alternatives in case expression
Use EmptyCase to allow this
После включения автоматического многострочного режима с помощью :set +m
(установите его в ~/.ghci
, чтобы включить его по умолчанию!):
> (3 +
| 4)
7
> case () of
| () -> ()
|
()
Сиз этой преамбулы, теперь я могу сказать вам, в чем небольшая разница: myPi = 3.14
не запускает многострочную обработку, а определяет ее немедленно;но let myPi = 3.14
запускает многострочную обработку.Это может иметь значение, например, если вы хотите создать взаимно рекурсивные привязки;без let
их нужно будет вводить в одну строку и разделять точными точками с запятой, тогда как в let
и автоматическом многострочном режиме вы можете использовать отступы для их разделения стандартным идиоматическим способом.
(Кроме того, если вы используете очень старые версии GHC, форма, отличная от let
, возможно, еще не была доступна.)