type value = Value of (value -> value);; let fold f = Value f let unfold (Value f) = f;;