
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
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
class. Because it doesn't do anything? 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.