(* 'a -> 'a *) 
(* bool -> bool *)
let f x = if x then x else x

(* 'a -> bool -> 'a *)
let g x y = if y then x else x

(* bool -> 'a -> 'a -> 'a *)
let h x y z = if x then y else z

(* bool -> 'a -> 'b -> 'a *)
let i x y z = if x then y else y