[MLton] Bug in signature ascription
Wesley W. Terpstra
terpstra at gkec.tu-darmstadt.de
Tue Feb 6 14:28:28 PST 2007
On Feb 6, 2007, at 10:38 PM, Matthew Fluet wrote:
> I don't believe that there is any bug in signature ascription. You
> are simply encountering the fact that FOLD is not the principal
> signature of Fold. If you eagerly ascribe the signature FOLD to
> Fold, then the resulting types are too constrained to give Foldr
> the signature FOLD. (There may be a different implementation of
> Foldr in terms of Fold:FOLD that can ascribe Foldr the signature
> FOLD.)
>
> You can "fix" things like this:
>
> local
> structure Fold = struct ... end
> structure Foldr = struct ... end
> in
> structure Fold :> FOLD = Fold
> structure Foldr :> FOLD = Foldr
> end
Let me confirm that I understand what you're saying: Foldr needs
enough polymorphism to match the signature FOLD. Unfortunately, the
implementation of Foldr required more polymorphism from Fold than
FOLD let escape. That's quite a nasty corner case, and I would've
never suspected it. Thanks! I just assumed that Vesa's signature was
correct since the whole Fold structure is deep magic that I'm
terrified to touch. :-)
In fact, I've already found that Foldr.t needs five type variables,
or it breaks variable arity polymorphism. So, I guess the wiki page
which describes the signature is wrong. I'll correct the page as soon
as I've found the polymorphism that Fold lost.
Is there any way to get a printout of the principle signature? One
that doesn't have '???' all over it?
More information about the MLton
mailing list