Рекурсивная взаимность

Feb 18, 2016 17:16

Между Haskell Report и GHC base имеется дивная взаимная рекурсия.

В GHC base мы имеем такое определение наименьшей неподвижной точки (least fixpoint)

fix :: (a -> a) -> a
fix f = let x = f x in x

В Haskell Report в разделе 3.12 описана трансляция для выражения let в ядро (привожу только релевантные правила)

let p = e1 in e0 = case e1 of ˜p ( Read more... )

haskell, joke

Leave a comment

Comments 12

maxim February 18 2016, 15:44:18 UTC
А есть какой-то алгоритм перевода Фикспойнт термов в правые фолды (с ограничениями)?
Я хочу примитивные фикспойнт потоковые парсеры (FSM) транслировать в foldr.
Типа в языке рекурсия чтобы присуствовала как понятие, но в ядре тайпчекера ее нет.

Reply

deni_ok February 18 2016, 16:39:28 UTC
А зачем fix в языке, примитивной рекурсии над Nat недостаточно?

Reply

maxim February 18 2016, 16:53:23 UTC
ну я вот про такую запись

expr([{N,X}|T],[{typevar,Y}|Acc]) -> expr(T,[{N,X},{typevar,Y}|Acc ( ... )

Reply

nponeccop February 18 2016, 17:58:48 UTC
Оно undecidable, но это ничего не значит

http://stackoverflow.com/a/14719346 - полезная ссылка про наименьшие и наибольшие фикспоинты

Reply


papa_lyosha February 19 2016, 01:37:31 UTC
Класс!

Reply


Leave a comment

Up