title: What is this abstract data type called?
body: <p>I'm writing Haskell, but this could be applied to any OO or functional language with a concept of ADT.  I'll give the template in Haskell, ignoring the fact that the arithmetic operators are already taken:</p>
  
  <pre><code>class Thing a where
     (+) :: a -&gt; a -&gt; a
     (-) :: a -&gt; a -&gt; a
     x - y = x + negate y
     (*) :: (RealFrac b) =&gt; a -&gt; b -&gt; a
     negate :: a -&gt; a
     negate x = x * (-1)
  </code></pre>
  
  <p>Basically these are things that can be added and subtracted and also multiplied by real fractional values.  One example might be a simple list of numbers: addition and subtraction are pairwise (in Haskell, "(+) = zipWith (+)"), and multiplication by a real multiplies every item in the list by the same amount.  I've come across enough other examples to want to define it as a class, but I don't know exactly what to call it.</p>
  
  <p>In Haskell its usually a monoid provided there is some kind of zero value.</p>
  
  <p>Is this some known kind of object in the zoo of algebraic types?  I've looked through rings, semirings, nearsemirings, groups etc without finding it.</p>