packages feed

baskell-0.1: examples/TupleList.bs

# An implementation of lists using tuples (Lisp style).
#
# Of course Hindley Milner type inference has trouble with this!
#
# Relies on a primitive: isTuple :: a -> Bool
#
# Author: Bernie Pope
# Date:   10 October 2004

emptyList = nil;

isEmpty = compose not isTuple;

cons = \x -> \list -> (x, list);

hd = fst;

tl = snd;

fromTupList 
   = \list -> 
        ite (isEmpty list) 
            [] 
            (Cons (hd list) (fromTupList (tl list)));

toTupList   
   = \list -> 
        ite (null list) 
            emptyList 
            (head list, toTupList (tail list));

unit = \x -> (x, emptyList);

rev 
   = !list -> 
        ite (isEmpty list) 
            emptyList 
            (join (rev (tl list)) (unit (hd list)));

join 
   = !list1 -> !list2 -> 
        ite (isEmpty list1) 
            list2 
            (hd list1, join (tl list1) list2);