Church' List constructors (was: "Green Card" ...)

Koen Claessen koen@cs.chalmers.se
Wed, 29 Nov 2000 10:28:22 +0100 (MET)


Marcin 'Qrczak' Kowalczyk wrote:

 | 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
 :
 | In ghc algebraic types are really implemented in a similar way :-)

Well, not really. This implementation does not give you
sharing between lists. Everytime you use "forlist", the list
is reevaluated. In GHC, this does not happen of course.

Regards,
Koen.

--
Koen Claessen         http://www.cs.chalmers.se/~koen     
phone:+46-31-772 5424      mailto:koen@cs.chalmers.se
-----------------------------------------------------
Chalmers University of Technology, Gothenburg, Sweden