{-# LANGUAGE DefaultSignatures #-}
module Language.Hasmtlib.Integraled where
import qualified Prelude as P
import Numeric.Natural
import Data.Word
import Data.Functor.Identity
import Data.Functor.Const
class Integraled a where
quot :: a -> a -> a
a
n `quot` a
d = a
q where (a
q,a
_) = a -> a -> (a, a)
forall a. Integraled a => a -> a -> (a, a)
quotRem a
n a
d
rem :: a -> a -> a
a
n `rem` a
d = a
r where (a
_,a
r) = a -> a -> (a, a)
forall a. Integraled a => a -> a -> (a, a)
quotRem a
n a
d
div :: a -> a -> a
a
n `div` a
d = a
q where (a
q,a
_) = a -> a -> (a, a)
forall a. Integraled a => a -> a -> (a, a)
divMod a
n a
d
mod :: a -> a -> a
a
n `mod` a
d = a
r where (a
_,a
r) = a -> a -> (a, a)
forall a. Integraled a => a -> a -> (a, a)
divMod a
n a
d
quotRem :: a -> a -> (a, a)
default quotRem :: P.Integral a => a -> a -> (a, a)
quotRem = a -> a -> (a, a)
forall a. Integral a => a -> a -> (a, a)
P.quotRem
divMod :: a -> a -> (a, a)
default divMod :: P.Integral a => a -> a -> (a, a)
divMod = a -> a -> (a, a)
forall a. Integral a => a -> a -> (a, a)
P.quotRem
instance Integraled P.Int
instance Integraled P.Integer
instance Integraled P.Word
instance Integraled Natural
instance Integraled Word8
instance Integraled Word16
instance Integraled Word32
instance Integraled Word64
instance P.Integral a => Integraled (Identity a)
instance P.Integral a => Integraled (Const a b)