"Green Card" for untyped lambda calculus?
Marcin 'Qrczak' Kowalczyk
qrczak@knm.org.pl
28 Nov 2000 22:02:12 GMT
Tue, 28 Nov 2000 19:17:32 +0100 (CET), Elke Kasimir <elke.kasimir@catmint.de> pisze:
> The implementation I'm interested in (one without constructors) is:
>
> nil fornil forcons = fornil
> cons x xs fornil forcons = forcons x xs
> forlist fornil forcons ls = ls fornil forcons
It can be implemented in extended Haskell with local universal
quantification (ghc -fglasgow-exts, hugs -98):
newtype List a = List (forall b. b -> (a -> List a -> b) -> b)
nil = List (\fornil forcons -> fornil)
cons x xs = List (\fornil forcons -> forcons x xs)
forlist fornil forcons (List ls) = ls fornil forcons
map f = forlist nil (\x xs -> cons (f x) (map f xs))
In ghc algebraic types are really implemented in a similar way :-)
Pattern matching jumps into the value, giving to it an array of
continuations for each constructor. The value evaluates itself
and enters the chosen continuation.
It should be also directly implentable in OCaml with -rectypes flag
which turns off occurs check for types.
--
__("< Marcin Kowalczyk * qrczak@knm.org.pl http://qrczak.ids.net.pl/
\__/
^^ SYGNATURA ZASTĘPCZA
QRCZAK