
2009/11/25 Michael Mossey
I'm fairly new to Haskell, and starting to write some big projects. Previously I used OO exclusively, mostly Python. I really miss the "namespace" capabilities... a class can have a lot of generic method names which may be identical for several different classes because there is no ambiguity.
In my musical application, many "objects" (or in Haskell, data) have a time associated with them. In Python I would have an accessor function called "time" in every class.
This is really an opportunity to consider an important difference between the OO and typed, functional approach to things. In OO, we create classes that "have time" as a property or method; in the typed, functional approach we say there are a family of types that all allow a certain function to be called on them, `time :: t -> Time`. This is what type classes are all about; they allow us to say "here is a function and some types it works with". After all, you don't just want a `time` property -- you also want it to give you a `Time`. When one is accustomed to treating properties as "part of an object", it's natural to go the record syntax route; but this doesn't capture the notion that all these records conform to a certain type equation. In this way, Haskell is more demanding of you; but it also offers you a way to make the semantics of your data explicit. -- Jason Dusek