module Algebra.Real (
C(abs, signum),
) where
import qualified Algebra.Ring as Ring
import qualified Algebra.Additive as Additive
import qualified Algebra.ZeroTestable as ZeroTestable
import Algebra.Ring (one, )
import Algebra.Additive (zero, negate,)
import Data.Int (Int, Int8, Int16, Int32, Int64, )
import Data.Word (Word, Word8, Word16, Word32, Word64, )
import PreludeBase
import qualified Prelude as P
import Prelude(Int,Integer,Float,Double)
class (Ring.C a, ZeroTestable.C a, Ord a) => C a where
abs :: a -> a
signum :: a -> a
abs x = max x (negate x)
signum x = case compare x zero of
GT -> one
EQ -> zero
LT -> negate one
instance C Integer where
abs = P.abs
signum = P.signum
instance C Float where
abs = P.abs
signum = P.signum
instance C Double where
abs = P.abs
signum = P.signum
instance C Int where
abs = P.abs
signum = P.signum
instance C Int8 where
abs = P.abs
signum = P.signum
instance C Int16 where
abs = P.abs
signum = P.signum
instance C Int32 where
abs = P.abs
signum = P.signum
instance C Int64 where
abs = P.abs
signum = P.signum
instance C Word where
abs = P.abs
signum = P.signum
instance C Word8 where
abs = P.abs
signum = P.signum
instance C Word16 where
abs = P.abs
signum = P.signum
instance C Word32 where
abs = P.abs
signum = P.signum
instance C Word64 where
abs = P.abs
signum = P.signum