[Haskell-cafe] type classes and logic

Patrick Browne patrick.browne at dit.ie
Sat Aug 28 06:17:39 EDT 2010

Daniel Fischer wrote:
>> class BEING human  => HUMAN human where
>> Sub-classing is logical implication BEING(human)  => HUMAN(human)
>> All types t that make BEING(t) = true also make HUMAN(t)=true
> No, it's the other way round. Every HUMAN is also a BEING, hence
> HUMAN(t) => BEING(t)

Could I say that HUMAN is a subset of BEING?

Sebastian Fischer wrote:
>> You can define subclasses even if no instances exist. And as Daniel
>> said, the code
>>     class BEING human => HUMAN human where
>> defines a subclass HUMAN of BEING which means that every instance of
>> HUMAN must also be a BEING. You can read it as: "a BEING is also a HUMAN
>> by the following definitions".

Thanks for pointing out my error
But I am still not sure of the interpretation of logical implication wrt
to sub-classes. Lets simplify the representation and just regard the
classes in the example as propositions (instead of predicates).
I am not sure if this simplification still makes the example valid.
Below is a reasonable interpretation of propositional logical implication.

a) If I wear a raincoat then I stay dry (sufficient condition)
wareRaincoat => stayDry
b) I will stay dry only if I ware a raincoat(necessary condition)
stayDry => wareRaincoat

In the light of the above examples how should I interpret the
class-to-subclass relation as logical implication? Is it
a)  If BEING then HUMAN (sufficient condition): BEING => HUMAN
b)  HUMAN is true only if BEING (necessary condition): HUMAN => BEING
c) Neither?


This message has been scanned for content and viruses by the DIT Information Services E-Mail Scanning Service, and is believed to be clean. http://www.dit.ie

More information about the Haskell-Cafe mailing list