[Haskell-cafe] Re: Newbie question
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).
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
More information about the Haskell-Cafe