[Haskell-cafe] type classes and logic

Daniel Fischer daniel.is.fischer at web.de
Fri Aug 27 09:19:42 EDT 2010

On Friday 27 August 2010 14:54:53, Patrick Browne wrote:
> class BEING human  => HUMAN human where
> At this point there is no additional functionality is defined for the
> subclass HUMAN
> 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)

Admittedly, the notation for subclasses in Haskell is backwards.

The corresponding situation for Java interfaces (which are roughly 
analogous to type classes) would be

interface BEING{ ... }

interface HUMAN extends BEING{ ... }

More information about the Haskell-Cafe mailing list