[Haskell-cafe] Re: Newbie question

Peter Verswyvelen bf3 at telenet.be
Mon Jan 21 16:36:49 EST 2008

Hey, I knew about the forall (I use that to represent OO style
collections, very handy), but not about the exists. Thanks. But GHC
6.8.2 (with -fglasgow-exts) does not seem to accept this "exists"

Does a book or document already exist (except the website) that tells
more about not standarized yet very cool Haskell thingies that make
writing real world applications possible? I would LOVE such a book.


On Mon, 2008-01-21 at 16:10 -0500, Stefan Monnier wrote:
> > How does caller choose which particular instance of Num they want?
> By passing the type they want.  That's what the "Num a =>" thingy does.
> > In object-oriented language If function return type is an interface it means
> > that it can return any implementation of this interface, but caller can't
> > choose which particular inplementation they want.
> The full type of "f" you've given is:
>   forall a . (Num a) => Integer -> a
> where the "forall a ." is normally not written.  What you describe (a
> function that returns something where the type can be chosen by the
> function itself) would have type:
>   Integer -> (exists a . (Num a) => a)
> I.e. the "a" is not passed as a (type) argument, but instead it's
> returned by the function.
> > What the difference between haskell class and interface in object-oriented
> > languge such Java or C#?
> >From a low-level point of view, the difference is that the vtable is
> manipulated separately from the objects.  The "Num a" basically stands
> for the type of the vtable (which is called "dictionary" in Haskell).
> To bundle an object with its vtable as is traditionally done in OO
> languages, you need to create an existential package, e.g. something of
> type (exists a . (Num a) => a).
>         Stefan
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe

More information about the Haskell-Cafe mailing list