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