[Haskell-cafe] default function definitions
Alexander Solla
ajs at 2piix.com
Sat Jul 24 14:30:52 EDT 2010
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.
More information about the Haskell-Cafe
mailing list