[Haskell-cafe] Problem trying to get class Bounded to work
Brian Hulley
brianh at metamilk.com
Tue May 23 17:56:38 EDT 2006
Benjamin Franksen wrote:
> On Tuesday 23 May 2006 02:00, Brian Hulley wrote:
>> I wonder if Haskell' will automatically make type variables scope
>> over the function body (without an explicit forall)? Is there any
>> reason why they shouldn't always do so?
>
> One I can think of is that the type signature for a function may be at
> the other end of the file. Some discussion about the pros and cons can
> be found here
>
> http://www.mail-archive.com/haskell%40haskell.org/msg15738.html
>
> and here
>
> http://article.gmane.org/gmane.comp.lang.haskell.glasgow.user/9219
Thanks for the links. I hadn't realised there were so many hard choices to
make in the design of the type system and that it is not clear that there is
a unique correct answer to the problem. I'll have to do some further reading
to find the meaning of "rigid" and "wobbly" and "non-type type variables" or
type variables which are not types... ;-)
I must admit I also don't understand why there is a difference between let
bindings and case bindings. (I know let bindings are lazy but I don't see
what difference this makes to the type system) Or is the difference just due
to the desire to still have a monomorphism restriction and/or limitations
with HM type inference? Would the difference be needed if a different type
system (eg intersection types with principal *typing* property instead of HM
types which only have a principal types property) were used?
I was very surprised at the decision to use the otherwise redundant "forall"
to make a distinction between whether or not type variables are scoped,
since a simple compiler option could have been used to turn on/off implicit
scoping instead to preserve compatibility with H98 modules.
One issue seems to be that H98 compatibility (eg implicit forall) is
fundamentally incompatible with a simple uniform approach to typing in the
presence of all the advanced type extensions that have been added since H98
was designed.
It still seems there are too many different cases. Perhaps there are
conflicting demands on the type system and the rejection of some of these
demands would lead to a simpler solution?
Robert Dockins wrote:
> GHC has an extension to allow scoped type variables and there's also
> a Haskell' ticket for it.
>
> http://www.haskell.org/ghc/docs/latest/html/users_guide/type-extensions.html#scoped-type-variables
> http://hackage.haskell.org/trac/haskell-prime/wiki/ScopedTypeVariables
Hopefully the ticket will get more detailed and concrete and
rationally-reconstructed to remove the existing quirks and "thence grow to a
point" as Shakespeare might have said, in due course.
Regards, Brian.
More information about the Haskell-Cafe
mailing list