and :: List Bool -> Bool
and xs = case xs of
Nil -> True ; Cons x xs' -> x && and xs'
length :: List a -> Int
length xs = case xs of
Nil -> 0 ; Cons x xs' -> 1 + length xs'
fold :: b -> ( a -> b -> b ) -> [a] -> b
fold nil cons xs = case xs of
Nil -> nil
Cons x xs' -> cons x ( fold nil cons xs' )
and = fold True (&&)
length = fold 0 ( \ x y -> 1 + y)