[Haskell-cafe] Type classes

Andrew Coppin andrewcoppin at btinternet.com
Sun Jul 4 07:25:25 EDT 2010

Yesterday I read the Typeclassopedia [again]. In the course of doing 
this, I discovered that several types have class instances that do 
something useful. (Indeed, some of these instances do things that I've 
written custom functions to do.)

The trouble is, when you read the documentation, it might say something like

  data Foo
  instance Monoid Foo

This tells me that Foo is an instance of Monoid. It utterly fails to 
tell me what the heck the Monoid instance actually *does*. Now, 
sometimes it's quite obvious. (E.g., just about the only binary 
operation on lists is (++).) But sometimes it's not less obvious, and 
sometimes it's so utterly mystifying that just about the only way to 
find the answer is to either read the source code or run example code 
and try to deduce some kind of pattern in the answers.

In summary, I think we need to devise a way of better-documenting class 
instances. Sometimes important functionallity can only be accessed using 
a class, and if it isn't too obvious what a particular class instance 
does, you can miss that functionallity and end up implementing it again 
by hand. (Or worse, thinking it's just impossible.) And there's also 
little quirks like the way Eq usually means value-equality, but for 
mutable structures it's usually defined as reference-equality. And then 
of course there are non-standard user-defined classes and their instances...

More information about the Haskell-Cafe mailing list