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