0 :: a add :: a → a → a cons :: b → c → c id :: a → a map :: (b → b) → c → c nil :: c s :: a → a id(X) → X add(0) → id add(s(Y), U) → s(add(Y, U)) map(H, nil) → nil map(I, cons(P, X1)) → cons(I(P), map(I, X1))