Почему это ошибка разбора в нотации do?
Рассмотрим следующий код:
foo = do
let bar = do
baz
bar
Не разбирается в ghc
, версия 8. Жалуется на строку, содержащую baz
, Этот код анализирует, хотя:
foo = do
let bar = do
baz
bar
Я нахожу это запутанным. В чем принципиальная разница между двумя версиями?
1 ответ
Решение
Проблема в том, что отступы ставятся baz
в ничейной стране. Это не отступает достаточно далеко, чтобы быть частью let
выражение, но оно отступает слишком далеко, чтобы быть следующей частью do
выражение, содержащее let
выражение.