Haskell: Why is (+), (-) part of Num typeclass?
<p>From ghci:</p>



<pre class="lang-hs prettyprint-override"><code>Prelude&gt; :i Num                              
class Num a where                            
  (+) :: a -&gt; a -&gt; a                         
  (-) :: a -&gt; a -&gt; a                         
  (*) :: a -&gt; a -&gt; a                         
  negate :: a -&gt; a                           
  abs :: a -&gt; a                              
  signum :: a -&gt; a                           
  fromInteger :: Integer -&gt; a                
        -- Defined in `GHC.Num'              
instance Num Word -- Defined in `GHC.Num'    
instance Num Integer -- Defined in `GHC.Num' 
instance Num Int -- Defined in `GHC.Num'     
instance Num Float -- Defined in `GHC.Float' 
instance Num Double -- Defined in `GHC.Float'
</code></pre>

<p>Why is <code>(+)</code>, <code>(-)</code> part of the Num class to begin with?</p>

<p>For example - you could easily define this type class:</p>

<pre class="lang-hs prettyprint-override"><code>class Plus a where
     (+) :: a -&gt; a -&gt; a
</code></pre>

<p>And then let:</p>

<pre class="lang-hs prettyprint-override"><code>instance Plus [] where
    (+) = (++)
</code></pre>

<p>And you could also define these for sets to mean set union, or add <code>(-)</code> to a type class to mean set difference... And it makes no sense to define <code>signum</code> on a list.</p>

<p>Of course I could create my own type class that uses <code>(|+|)</code> instead
 - but why was these operators reserved in haskell for Num alone?</p>

<p>So why was this choice made? Is it due to legacy or has no one wanted this?</p>