Главное, что принцип работает и компилируется - то самое завещанное SICP счастье абстрактного списка через последовательное сцепление пар, реализованное без data а через функции.
Работать-то работает… Кстати, а числа, кодируемые функциями
, видели?
А при таком последовательном сцеплении пар тип тожепоследовательно накручивается и зависит от длины списка.
А, это. В хаскеле комбинатор фиксированной точки на уровне типов выразим, но только используя
data, вроде. Тут я плаваю, не верьте мне и проведите своё исследование. Просто я видел упоминания типа
Fix довольно близко к упоминаниям type-level вычислений, но для чего он там нужен, особо не интересовался. Обычную же функцию
fix,
fix f = f $ fix f типизировать можно. Вот сие
> let fix f = f (fix f)
fix :: (t -> t) -> t
> let factorial = fix (\f x -> if x == 0 then 1 else x * f (x - 1))
factorial :: Integer -> Integer
> factorial 6
720
it :: Integer
работает, и если вам только это было и нужно (сомневаюсь) — ура! [Ухожу спать, всем удачи.]
-- Пн мар 09, 2015 06:25:07 --(Оффтоп)
А вообще я не там скобку поставил сначала, и Хиндли и Милнер тут как тут!
Тот самый бесконечный тип, попадалось такое и раньше.