module type FUN_UTILS = sig val cons : 'a -> 'a list -> 'a list val pair : 'a -> 'b -> 'a * 'b val triple : 'a -> 'b -> 'c -> 'a * 'b * 'c val flip : ('a -> 'b -> 'c) -> ('b -> 'a -> 'c) val o : ('b -> 'c) -> ('a -> 'b) -> ('a -> 'c) val id : 'a -> 'a end module FunUtils : FUN_UTILS = struct let cons x xs = x :: xs let pair x y = (x , y) let triple x y z= (x , y, z) let flip f a b = f b a (* function composition *) let o f g x = f (g x) (* identity function *) let id x = x end