head (a : b) == a tail (a : b) == b cns a b == a : b add a b == a + b sub a b == a - b mul a b == a * b length [] == 0 length (a : b) == 1 + length b sum [] == 0 sum (a : b) == a + sum b addtoend x [] == [ x ] addtoend x (a : b) == a : addtoend x b map f [] == [] map f (a : b) == f a : map f b reduce1 f [a] == a reduce1 f (a : b) == f a (reduce1 f b) reduce2 f [a] == a reduce2 f (a : b) == f (reduce2 f b) a reduce3 f [] s == s reduce3 f (a : b) s == f a (reduce3 f b s) reduce4 f [] s == s reduce4 f (a : b) s == f (reduce4 f b s) a reduce5 f [] s == s reduce5 f (a : b) s == reduce5 f b (f a s) reduce6 f [] s == s reduce6 f (a : b) s == reduce6 f b (f s a) first 0 L == [] first n [] == [] first n (a : b) == a : first (n - 1) b intsbetween a a == [ a ] intsbetween a b == a : intsbetween (a + 1) b insert x [] == [ x ] insert x (a : b) == a : insert x b <| x > a |> x : a : b sort [] == [] sort (a : b) == insert a (sort b) head (a : b) == a head x == "bad!" min lst == head (sort lst)