@@ -15,9 +15,10 @@ module Prelude
15 , Monad, return, liftM1, ap
15 , Monad, return, liftM1, ap
16 , Semiring, (+), zero, (*), one
16 , Semiring, (+), zero, (*), one
17 , Ring, (-)
17 , Ring, (-)
20− , DivisionRing, (/)
20+ , ModuloRing, (/), mod
22 , Eq, (==), (/=), refEq, refIneq
23 , Eq, (==), (/=), refEq, refIneq
23 , Ord, Ordering(..), compare, (<), (>), (<=), (>=)
24 , Ord, Ordering(..), compare, (<), (>), (<=), (>=)
@@ -204,7 +205,7 @@ module Prelude
205 infixl 7 *
206 infixl 7 *
206 infixl 7 /
207 infixl 7 /
207− -- infixl 7 %
208+ infixl 7 %
209 infixl 6 -
210 infixl 6 -
210 infixl 6 +
211 infixl 6 +
@@ -223,11 +224,17 @@ module Prelude
223 negate :: forall a. (Ring a) => a -> a
224 negate :: forall a. (Ring a) => a -> a
224 negate a = zero - a
225 negate a = zero - a
226− -- | Ring with division (possibly non-commutative field)
227+ -- | Ring with modulo operation and division where
228+ -- | ```a / b * b + (a `mod` b) = a```
227− class (Ring a) <= DivisionRing a where
229+ class (Ring a) <= ModuloRing a where
228 (/) :: a -> a -> a
230 (/) :: a -> a -> a
233+ -- | Ring where every nonzero element has a multiplicative inverse (possibly
234+ -- | a non-commutative field) so that ```a `mod` b = zero```
235+ class (ModuloRing a) <= DivisionRing a
230− -- | Definitely commutative field
237+ -- | A commutative field
231 class (DivisionRing a) <= Num a
238 class (DivisionRing a) <= Num a
233 foreign import numAdd
240 foreign import numAdd
@@ -275,6 +282,8 @@ module Prelude
276 """ :: Number -> Number -> Number
283 """ :: Number -> Number -> Number
278 instance semiringNumber :: Semiring Number where
287 instance semiringNumber :: Semiring Number where
279 (+) = numAdd
288 (+) = numAdd
@@ -284,8 +293,11 @@ module Prelude
284 instance ringNumber :: Ring Number where
293 instance ringNumber :: Ring Number where
285 (-) = numSub
294 (-) = numSub
287− instance divisionRingNumber :: DivisionRing Number where
296+ instance moduloRingNumber :: ModuloRing Number where
288 (/) = numDiv
297 (/) = numDiv
300+ instance divisionRingNumber :: DivisionRing Number
290 instance numNumber :: Num Number
302 instance numNumber :: Num Number