
On 17 July 2011 11:36, Patrick Browne
Hi, Is it possible to model partial inheritance using Haskell type classes? For example, if the class Bird has a flying method can we represent Penguins as a sub-class of Bird without a flying method?
Possibly with duck typing[1], but that's not vanilla Haskell type classes. FWIW I think you'd have to have: class (Flying a,Wings a,Feathers a,Beak a) => Bird a class (Wings a,Feathers a,Beak a) => Penguin a But I think that's nice anyway. Your functions, IMHO, should ask for only the properties of the object it needs, so: nomOnCorn :: Beak a => a -> Corn -> a nomOnCorn = ... Rather than nomOnCorn :: Bird a => a -> Corn -> a nomOnCorn = ... As there's no need to restrict yourself by having a Bird class, IMHO. I don't think the subclassing/hierarchy concept scales as well as a graph. [1]: http://chrisdone.com/posts/2010-11-22-duck-typing-in-haskell.html