[MLton] Monadic MLton.Vector.create with update
Stephen Weeks
MLton@mlton.org
Thu, 30 Mar 2006 12:02:13 -0800
I think we all agree that one needs both a function that deals with
state explicitly, like unfold, and a function that deals with state
implicitly, like tabulate. I'd make the following analogy, depending
on whether one is traversing or creating a structure.
implicit explicit
-------- --------
traverse app fold
create tabulate unfold
The question at hand is whether unfold should return then final
state. It currently does not, but I think that is inconsistent with
unfold dealing with explicit state. By analogy, should the type of
fold be
val fold: 'a vector * 'b * ('a * 'b -> 'b) -> unit
Of course not.
And with unfold, just because it happens to create something along the
way doesn't change the fact that it has been accumulating an explicit
state.
Yes, I think it should clearly be changed from
val unfold: int * 'b * ('b -> 'a * 'b) -> 'a vector
to
val unfold: int * 'b * ('b -> 'a * 'b) -> 'a vector * 'b