[MLton] expansive expressions yielding polymorphic values
Stephen Weeks
sweeks at sweeks.com
Thu Feb 28 10:34:53 PST 2008
> Note, even though f is the result of an expansive expression (function
> composition), the signature Z can make its type polymorphic.
>
> Can people confirm that this really is supposed to be legal?
I think it is supposed to be legal. What is going on is not that "f"
is polymorphic, it is that f's type (unit -> int) is at least as
general as the type specified in the signature ('a t -> int), where
the signature matching gets to assume that 'a t = unit. A simpler
example might be
structure Z : sig
type 'a t
val s : 'a t
end = struct
type 'a t = string
val s = "foo"
end
Also note that once you have hidden the fact that "t" is monomorphic,
clients can no longer take advantage of that fact in type checking
their own expansive expressions.
More information about the MLton
mailing list