On Jul 24, 2010, at 10:59 AM, Patrick Browne wrote:

class C1 c1 where
 age :: c1 -> Integer
-- add default impl, can this be defined only once at class level?
-- Can this function be redefined in a *class* lower down the heirarchy?
age(c1) = 1


Yes, but keep in mind that the hierarchy is only two levels tall. This mechanism isn't meant for OO-style inheritance.



-- Is it true that instances must exists before we can run function or
make subclasses?
instance C1  Person where
instance C1  Employee where


Yes, absolutely.


-- Is it true that C2 can inherit age, provided an instance of C1 exists
class C1 c2 =>  C2 c2 where
 name :: c2 -> String
 name(c2) = "C2"

instance C2  Person where
instance C2  Employee where

There's no notion of "inheritance" here. If Person belongs to C2, then it "must" belong to C1, because you have specifically said that a C2 needs to be a C1 (presumably because you need a person's age to compute their name). So Person will be using C1's "age" function, in virtue of having a C1 instance.

Compare this to:

class C4 c4 where name' :: c4 -> String

instance C1 Person -- gives Person an age function, either default or overridden instance C1 thing => C4 thing -- gives every C1 thing a name, needs Haskell extensions.


-- Is it true that C3 cannot override C1 or C2 existing defaults?
-- Is it true that this must be done at instance level?
-- class Cx c3 =>  C3 c3 where
--    age(c3) = 3

Yes, as I said, the hierarchy is two levels tall.

_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to