Я предполагаю, что им явно нужен синтаксис if / then / else, который они не могут получить без функций mixfix, как в agda. Функция, на которую вы ссылаетесь, структурирована как троичная, которую вы могли бы реализовать самостоятельно, хотя я полагаю, что они дали нам сахар if / then / else (скорее всего, это просто сахар над случаем) только потому, что они могли, и это безвредно .. Но у меня ничего нет чтобы поддержать меня здесь, поэтому я пишу это в комментарии.
Джимми Хоффа
10
Это может быть очевидным для большинства читателей, но я хотел бы отметить, что наличие функции f / then / else не было бы хорошим решением в нетерпеливом языке (например, схема или sml), хотя это разумно в ленивом язык, как Haskell.
Джорджио
Ответы:
24
Это чисто для хорошего сахара if, thenи elseключевых слов; на самом деле, GHC (с RebindableSyntaxвключенным расширением) будет десагаровать синтаксис, просто вызывая любую ifThenElseфункцию в области видимости.
Это не имеет большого значения ... для меня это выглядит так, как если бы / то / иное не использовалось очень часто в наше время. Я нахожу себя пишущим охранников, если ... тогда ... еще.
С синтаксической точки зрения, однако, приятно иметь
if expr1 then expr2 else expr3
Так что вы можете написать
if foo a then bar b else baz c
вместо того
if (foo a) (bar b) (baz c)
который выглядит слишком LISPish для меня.
Для семантического анализа и генерации кода хорошо иметь такую конструкцию, которую можно легко скомпилировать в эффективный машинный код. Обратите внимание, что код может пропустить часть, которая создает thunk для ветви, которая не достигнута, в отличие от вызова функции, где все (неоцененные) параметры должны быть переданы. Но это также требует времени (и памяти, которая должна быть восстановлена позже), чтобы создать Thunk. Чтобы справиться с этим, нужно было бы везде встроить функцию if.
Я не думаю, что встраивание является актуальной проблемой. Насколько я понимаю, GHC уже очень хорошо умеет вкладывать небольшие функции, потому что это просто такая распространенная модель в Haskell.
Тихон Джелвис
1
@TikhonJelvis Конечно, но с if / then / else вам не нужна специальная функция, которая всегда должна быть встроенной. Вам даже не нужен проход для вставки, и все же вы можете генерировать приличный код. Не весь мир - это GHC.
Ответы:
Это чисто для хорошего сахара
if
,then
иelse
ключевых слов; на самом деле, GHC (сRebindableSyntax
включенным расширением) будет десагаровать синтаксис, просто вызывая любуюifThenElse
функцию в области видимости.источник
Это не имеет большого значения ... для меня это выглядит так, как если бы / то / иное не использовалось очень часто в наше время. Я нахожу себя пишущим охранников, если ... тогда ... еще.
С синтаксической точки зрения, однако, приятно иметь
Так что вы можете написать
вместо того
который выглядит слишком LISPish для меня.
Для семантического анализа и генерации кода хорошо иметь такую конструкцию, которую можно легко скомпилировать в эффективный машинный код. Обратите внимание, что код может пропустить часть, которая создает thunk для ветви, которая не достигнута, в отличие от вызова функции, где все (неоцененные) параметры должны быть переданы. Но это также требует времени (и памяти, которая должна быть восстановлена позже), чтобы создать Thunk. Чтобы справиться с этим, нужно было бы везде встроить функцию if.
источник