Confusing (to me) statement from "Type Classes in Haskell" I'm reading up on type classes, and started looking at the paper Type Classes in Haskell.

In Section 2.2 - Superclasses, the authors use the following example:

class (Eq a) =&gt; Ord a where 
   (&lt;)  :: a -&gt; a -&gt; Bool
   (&lt;=) :: a -&gt; a -&gt; Bool


Then, they proceed to state that "This declares that type a belongs to class Ord if there are operations (&lt;) and (&lt;=) of the appropriate type and if a belongs to class Eq. Thus, if (&lt;) is defined on some type, then (==) must be defined on that type as well."

The second sentence does not make any sense to me; why would a type that defines (&lt;) have to define (==) if it is not declared to be an instance of either Ord or Eq?
Simple answer: When the above class definition is in scope, you simply cannot bind (&lt;) or (&lt;=) except as part of an instance declaration for Ord.