[Haskell-cafe] I miss OO
jason.dusek at gmail.com
Wed Nov 25 19:34:26 EST 2009
2009/11/25 Michael Mossey <mpm at alumni.caltech.edu>:
> 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.
More information about the Haskell-Cafe