peterv schrieb:
In de book Modern C++ design, Andrei Alexandrescu writes that Haskell
supports “multi-methods”

http://books.google.com/books?id=aJ1av7UFBPwC&pg=PA3&ots=YPiJ_nWi6Y&dq=moder
n+C%2B%2B&sig=FWO6SVfIrgtCWifj9yYHj3bnplQ#PPA263,M1

Chapter 11, Page 263 of this books:
The C++ virtual function mechanism allows dispatching of a call
depending on the dynamic type of one object. The multimethods feature
allows dispatching of a function call depending on the types of
multiple objects. A universally good implementation requires language
support, wich is the route that languages such as CLOS, ML, Haskell,
and Dylan have taken. C++ lacks such support, so it's emulation is
left to library writers.

I do not see why the author of this book included Haskell in this list. (But from what I know, CLOS is more like a combinator library then like a language, so I don't understand the point of this list at all).

Since Haskell has no language support for subtype polymorphism or dynamic dispatch of method calls, there are no dynamic multimethods either. But with multi-parameter typeclasses, we have statically dispatched multimethods, of course. (See Brian's answer). But the author speaks specifically about dynamic dispatch.

Sometimes, class hierarchies from an OO design are naturally represented by algebraic data types. Then OO methods become ordinary haskell function, and dynamic dispatch becomes pattern matching, wich is of course possible on all argument positions:

  data Solid = Asteroid
             | Planet Planet

  data Planet = Earth
              | Jupiter

  collide :: Solid -> Solid -> String
  collide Asteroid (Planet Earth) = "the end of the dinos"
  collide Asteroid (Planet _) = "an asteroid hit a planet"
  collide p@(Planet _) Asteroid  = collide Asteroid p
  collide _ _ = "solids collided"

But you have to sort the definitons for collide yourself, because there is no "selection of the most specific" automatically. While this is a sometimes sensible translation of an OO design into an FP design, it is not the same thing as having objects and subtypes and dynamic dispatch.

  Tillmann
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to