Miguel Mitrofanov wrote:
There's a third way, too, and I haven't seen anybody mention it yet

I've noticed it, but there are some problems with this representation, so I decided not to mention it. It's OK as far as we don't want functions working on two areas - I don't see, how we can implement, say, intersect :: Shape -> Shape -> Bool in this way. However, it's a useful pattern.

The problem is no better or worse for this third way than for type classes.

class Shape a where {
  intersect :: Shape b => a -> b -> Bool
}

data Shape a = { intersect :: Shape b => a -> b -> Bool }

in fact, the syntax is rather similar, too! :)

Jules
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to