functions not in type classes

Cagdas Ozgenc co19@cornell.edu
Fri, 18 Jan 2002 13:53:11 +0200


>
> the goal of type class is to allow overloading of function, so for example
> id x = x     is not subject to overloading => no use to put it in a type
class.

Because it doesn't do anything?

> > elem :: Eq a => a -> [a] -> Bool
> > map :: (a -> b) -> [a] -> [b]
> >
> > class Container a where
> >     elem :: Eq b => b -> a b -> Bool
> >     map :: (b -> c) -> a b -> a c
> >
> > would define methods that can work on all containers, and create a
> > discipline to write more reusable and generic functions.
>
> yes, that's right that map and elem could be put in a type class, but
that's hard and require
> more advanced feature of haskell (here you use constructor class but you
need more : multi-parameter class, ....)
> see http://www.cse.ogi.edu/~mpj/fds.html.
>

You shouldn't be using multi paramater type classes in place of type
constructors. Then you will have the ambiguity problems that you mention on
you web site. Multi parameter type classes have the benefit of using multi
dispatch based on two non related types.