Попытка реализовать комбинаторы SKI в Haskell ... Я не уверен, что представляет ^M
, но я думаю, что это как-то связано с нотацией vim при редактировании файла haskell.Кроме того, что обозначение типа функции eliminate
?Спасибо
data Exp = Var String | App Exp Exp | Lam String Exp | S | K |I ^M
transform (Lam x y) = (eliminate x y)
eliminate x S = App K S^M
eliminate x K = App K K^M
eliminate x I = App K I^M
eliminate x (Var y)
| x==y = I
| otherwise = (App K (Var y))
eliminate x (Lam y z) = eliminate x (eliminate y z)^M
eliminate x (App y z) = (App (App S (eliminate x y)) (eliminate x z))^M