cons :: nat → list → list explode :: list → (nat → nat) → nat → nat implode :: list → (nat → nat) → nat → nat nil :: list op :: (nat → nat) → (nat → nat) → nat → nat op(F, G, X) → F(G(X)) implode(nil, F, X) → X implode(cons(H, T), F, X) → implode(T, F, F(X)) explode(nil, F, X) → X explode(cons(H, T), F, X) → explode(T, op(F, F), F(X))