Я не могу понять, что такое суперкомбинаторы:
Суперкомбинатор - это либо константа, либо комбинатор, который содержит только суперкомбинаторы в качестве подвыражений.
А также с тем, что Constant Applicative Forms - это:
Любой суперкомбинатор, который не является абстракцией лямбды. Сюда входят действительно постоянные выражения, такие как 12, ((+) 1 2), [1,2,3], а также частично прикладные функции, такие как ((+) 4). Обратите внимание, что этот последний пример эквивалентен при eta-абстракции \ x -> (+) 4 x, что не является CAF.
Это просто не имеет никакого смысла для меня! Разве ((+) 4)
не является такой же "истинно постоянной" величиной, как и 12? Для моего простого ума CAF звучат как величины.
Мэтт прав в том, что определение сбивает с толку. Это даже противоречиво. CAF определяется как:
Любой суперкомбинатор, который не является лямбда-абстракцией. Это включает в себя действительно константные выражения, такие как
12
,((+) 1 2)
,[1,2,3]
, а также частично применяемые функции, такие как((+) 4)
.
Следовательно, ((+) 4)
рассматривается как CAF. Но в следующем предложении нам говорят, что это эквивалентно чему-то, что не является CAF:
этот последний пример эквивалентен при абстракции eta
\ x -> (+) 4 x
, который не является CAF.
Было бы яснее исключить частично примененные функции на том основании, что они эквивалентны лямбда-абстракциям.