
18 Dec
2007
18 Dec
'07
4:51 a.m.
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