functor (A : Default-> sig type a = A.a option val default : unit -> a end