[Haskell-beginners] Type classes are not like interfaces, after all

Andrew Wagner wagner.andrew at gmail.com
Fri Jan 23 10:20:47 EST 2009

I think this explanation is positively brilliant. Byorgey++

On Fri, Jan 23, 2009 at 9:59 AM, Brent Yorgey <byorgey at seas.upenn.edu>wrote:

> >
> > AbstractInterface a = new ConcreteClass();
> In Java, if a variable has type AbstractInterface, it is
> *existentially* quantified: it means, this variable references a value
> of *some* type, and all you know about it is that it is an instance of
> AbstractInterface.  Whatever code sets the value of the variable gets
> to choose its concrete type; any code that uses the variable cannot
> choose what type it should be, but can only use AbstractInterface
> methods on it (since that's all that is known).
> However, a Haskell variable with type
>  var :: AbstractInterface a => a
> is *universally* quantified: it means, this variable has a polymorphic
> value, which can be used as a value of any type which is an instance
> of AbstractInterface.  Here, it is the code which *uses* var that gets
> to choose its type (and indeed, different choices can be made for
> different uses); the definition of var cannot choose, and must work
> for any type which is an instance of AbstractInterface (hence it must
> only use methods of the AbstractInterface type class).
> Writing
> a :: Num n => n
> a = 3 :: Integer
> is trying to define a universally quantified value as if it were
> existentially quantified.
> Now, it *is* possible to have existentially quantification in Haskell;
> I can show you how if you like, but I think I'll stop here for now.
> Does this help?
> -Brent
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://www.haskell.org/mailman/listinfo/beginners
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/beginners/attachments/20090123/cafabf49/attachment.htm

More information about the Beginners mailing list