Initial commit
This commit is contained in:
commit
c101616e62
309 changed files with 53937 additions and 0 deletions
186
bundled/Basement/Numerical/Subtractive.hs
Normal file
186
bundled/Basement/Numerical/Subtractive.hs
Normal file
|
|
@ -0,0 +1,186 @@
|
|||
{-# LANGUAGE BangPatterns #-}
|
||||
{-# LANGUAGE DeriveDataTypeable #-}
|
||||
{-# LANGUAGE TypeFamilies #-}
|
||||
{-# LANGUAGE RebindableSyntax #-}
|
||||
{-# LANGUAGE NoImplicitPrelude #-}
|
||||
{-# LANGUAGE CPP, UndecidableInstances, TypeFamilies #-}
|
||||
module Basement.Numerical.Subtractive
|
||||
( Subtractive(..)
|
||||
) where
|
||||
|
||||
import Basement.Compat.Base
|
||||
import Basement.Compat.C.Types
|
||||
import Basement.Compat.Natural
|
||||
import Basement.IntegralConv
|
||||
import Basement.Bounded
|
||||
import Basement.Nat
|
||||
import Basement.Types.Word128 (Word128)
|
||||
import Basement.Types.Word256 (Word256)
|
||||
import qualified Basement.Types.Word128 as Word128
|
||||
import qualified Basement.Types.Word256 as Word256
|
||||
import qualified Prelude
|
||||
|
||||
-- | Represent class of things that can be subtracted.
|
||||
--
|
||||
--
|
||||
-- Note that the result is not necessary of the same type
|
||||
-- as the operand depending on the actual type.
|
||||
--
|
||||
-- For example:
|
||||
--
|
||||
-- > (-) :: Int -> Int -> Int
|
||||
-- > (-) :: DateTime -> DateTime -> Seconds
|
||||
-- > (-) :: Ptr a -> Ptr a -> PtrDiff
|
||||
-- > (-) :: Natural -> Natural -> Maybe Natural
|
||||
class Subtractive a where
|
||||
type Difference a
|
||||
(-) :: a -> a -> Difference a
|
||||
|
||||
infixl 6 -
|
||||
|
||||
instance Subtractive Integer where
|
||||
type Difference Integer = Integer
|
||||
(-) = (Prelude.-)
|
||||
instance Subtractive Int where
|
||||
type Difference Int = Int
|
||||
(-) = (Prelude.-)
|
||||
instance Subtractive Int8 where
|
||||
type Difference Int8 = Int8
|
||||
(-) = (Prelude.-)
|
||||
instance Subtractive Int16 where
|
||||
type Difference Int16 = Int16
|
||||
(-) = (Prelude.-)
|
||||
instance Subtractive Int32 where
|
||||
type Difference Int32 = Int32
|
||||
(-) = (Prelude.-)
|
||||
instance Subtractive Int64 where
|
||||
type Difference Int64 = Int64
|
||||
(-) = (Prelude.-)
|
||||
instance Subtractive Natural where
|
||||
type Difference Natural = Maybe Natural
|
||||
(-) a b
|
||||
| b > a = Nothing
|
||||
| otherwise = Just (a Prelude.- b)
|
||||
instance Subtractive Word where
|
||||
type Difference Word = Word
|
||||
(-) = (Prelude.-)
|
||||
instance Subtractive Word8 where
|
||||
type Difference Word8 = Word8
|
||||
(-) = (Prelude.-)
|
||||
instance Subtractive Word16 where
|
||||
type Difference Word16 = Word16
|
||||
(-) = (Prelude.-)
|
||||
instance Subtractive Word32 where
|
||||
type Difference Word32 = Word32
|
||||
(-) = (Prelude.-)
|
||||
instance Subtractive Word64 where
|
||||
type Difference Word64 = Word64
|
||||
(-) = (Prelude.-)
|
||||
instance Subtractive Word128 where
|
||||
type Difference Word128 = Word128
|
||||
(-) = (Word128.-)
|
||||
instance Subtractive Word256 where
|
||||
type Difference Word256 = Word256
|
||||
(-) = (Word256.-)
|
||||
|
||||
instance Subtractive Prelude.Float where
|
||||
type Difference Prelude.Float = Prelude.Float
|
||||
(-) = (Prelude.-)
|
||||
instance Subtractive Prelude.Double where
|
||||
type Difference Prelude.Double = Prelude.Double
|
||||
(-) = (Prelude.-)
|
||||
|
||||
instance Subtractive Prelude.Char where
|
||||
type Difference Prelude.Char = Prelude.Int
|
||||
(-) a b = (Prelude.-) (charToInt a) (charToInt b)
|
||||
instance (KnownNat n, NatWithinBound Word64 n) => Subtractive (Zn64 n) where
|
||||
type Difference (Zn64 n) = Zn64 n
|
||||
(-) a b = (Prelude.-) a b
|
||||
instance KnownNat n => Subtractive (Zn n) where
|
||||
type Difference (Zn n) = Zn n
|
||||
(-) a b = (Prelude.-) a b
|
||||
|
||||
instance Subtractive CChar where
|
||||
type Difference CChar = CChar
|
||||
(-) = (Prelude.-)
|
||||
instance Subtractive CSChar where
|
||||
type Difference CSChar = CSChar
|
||||
(-) = (Prelude.-)
|
||||
instance Subtractive CUChar where
|
||||
type Difference CUChar = CUChar
|
||||
(-) = (Prelude.-)
|
||||
instance Subtractive CShort where
|
||||
type Difference CShort = CShort
|
||||
(-) = (Prelude.-)
|
||||
instance Subtractive CUShort where
|
||||
type Difference CUShort = CUShort
|
||||
(-) = (Prelude.-)
|
||||
instance Subtractive CInt where
|
||||
type Difference CInt = CInt
|
||||
(-) = (Prelude.-)
|
||||
instance Subtractive CUInt where
|
||||
type Difference CUInt = CUInt
|
||||
(-) = (Prelude.-)
|
||||
instance Subtractive CLong where
|
||||
type Difference CLong = CLong
|
||||
(-) = (Prelude.-)
|
||||
instance Subtractive CULong where
|
||||
type Difference CULong = CULong
|
||||
(-) = (Prelude.-)
|
||||
instance Subtractive CPtrdiff where
|
||||
type Difference CPtrdiff = CPtrdiff
|
||||
(-) = (Prelude.-)
|
||||
instance Subtractive CSize where
|
||||
type Difference CSize = CSize
|
||||
(-) = (Prelude.-)
|
||||
instance Subtractive CWchar where
|
||||
type Difference CWchar = CWchar
|
||||
(-) = (Prelude.-)
|
||||
instance Subtractive CSigAtomic where
|
||||
type Difference CSigAtomic = CSigAtomic
|
||||
(-) = (Prelude.-)
|
||||
instance Subtractive CLLong where
|
||||
type Difference CLLong = CLLong
|
||||
(-) = (Prelude.-)
|
||||
instance Subtractive CULLong where
|
||||
type Difference CULLong = CULLong
|
||||
(-) = (Prelude.-)
|
||||
#if MIN_VERSION_base(4,10,0)
|
||||
instance Subtractive CBool where
|
||||
type Difference CBool = CBool
|
||||
(-) = (Prelude.-)
|
||||
#endif
|
||||
instance Subtractive CIntPtr where
|
||||
type Difference CIntPtr = CIntPtr
|
||||
(-) = (Prelude.-)
|
||||
instance Subtractive CUIntPtr where
|
||||
type Difference CUIntPtr = CUIntPtr
|
||||
(-) = (Prelude.-)
|
||||
instance Subtractive CIntMax where
|
||||
type Difference CIntMax = CIntMax
|
||||
(-) = (Prelude.-)
|
||||
instance Subtractive CUIntMax where
|
||||
type Difference CUIntMax = CUIntMax
|
||||
(-) = (Prelude.-)
|
||||
instance Subtractive CClock where
|
||||
type Difference CClock = CClock
|
||||
(-) = (Prelude.-)
|
||||
instance Subtractive CTime where
|
||||
type Difference CTime = CTime
|
||||
(-) = (Prelude.-)
|
||||
instance Subtractive CUSeconds where
|
||||
type Difference CUSeconds = CUSeconds
|
||||
(-) = (Prelude.-)
|
||||
instance Subtractive CSUSeconds where
|
||||
type Difference CSUSeconds = CSUSeconds
|
||||
(-) = (Prelude.-)
|
||||
instance Subtractive COff where
|
||||
type Difference COff = COff
|
||||
(-) = (Prelude.-)
|
||||
|
||||
instance Subtractive CFloat where
|
||||
type Difference CFloat = CFloat
|
||||
(-) = (Prelude.-)
|
||||
instance Subtractive CDouble where
|
||||
type Difference CDouble = CDouble
|
||||
(-) = (Prelude.-)
|
||||
Loading…
Add table
Add a link
Reference in a new issue