[MLton-user] curried function definition and pattern destructuring
Andreas Rossberg
rossberg@ps.uni-sb.de
Tue, 18 Jul 2006 11:11:56 +0200
Stephen Weeks wrote:
>
> It is arguably a design mistake that the Definition does what it does;
> but, since it does, it useful to keep in mind that these two
> definitions of 'f' are not equivalent.
>
> fun f (T {x, ...}) y = e
> fun f (T {x, ...}) = fn y => e
Mh, how would the difference be externally observable under the dynamic
semantics as specified in the Definition? I believe it isn't.
Consequently, it would be a valid optimization to transform the former
into the latter.
The only situation where the difference is observable is where any but
the last curried argument contains a ref pattern, because then the time
of dereferencing is changed by the transformation. In all other cases it
seems to be safe.
- Andreas
--
Andreas Rossberg, rossberg@ps.uni-sb.de