[Haskell-cafe] Re: What I wish someone had told me...

Derek Elkins derek.a.elkins at gmail.com
Wed Oct 15 21:39:31 EDT 2008


On Wed, 2008-10-15 at 14:45 -0400, Stefan Monnier wrote:
> > The instance selection for an interface is done at run-time and this is
> > inherently necessary.  The instance (in a different sense) selection for
> > type classes is almost always resolvable statically.  In Haskell 98
> 
> In both cases, the dispatch is inherently dynamic, and in both cases,
> most dispatches can be resolved at compile-time with sufficient effort.
> The actual percentage may be quite different, tho.
> Implementation techniques are also fairly different, and the resulting
> coding style is also very different, but the two concepts are
> fundamentally very close to each other.

Rewrite this code so that there is no run-time remnants of dynamic
dispatch, that is to say there is no run-time method look-up of any
sort.  You can assume that this plus an interface declaration for
IDrawable and two classes Square and Circle is the whole program.

int n = int.Parse(System.Console.ReadLine());
List<IDrawable> drawables = new List<IDrawable>();
for(int i = 0; i < n; ++i)
    drawables.Add(new Square());
drawables.Add(new Circle());

foreach(IDrawable drawable in drawables)
    drawable.Draw();

And exercise two:  Write a Haskell example using type classes and not
using existentials or polymorphic recursion where given the whole
program dispatch is inherently dynamic.



More information about the Haskell-Cafe mailing list