Module type Interface.UNFOLDABLE

type 'a t
val unfold : ('a -> ('a * 'a) option) -> 'a -> 'a t