basement-0.0.16: Foundation scrap box of array & string

License | BSD-style
Maintainer | Haskell Foundation
Safe Haskell | None
Language | Haskell2010

Basement.Bounded

Description

Types to represent ℤ/nℤ.

ℤ/nℤ is a finite field and is defined as the set of natural number: {0, 1, ..., n − 1}.

Synopsis

- data Zn64 (n :: Nat)
- unZn64 :: Zn64 n -> Word64
- data Zn (n :: Nat)
- unZn :: Zn n -> Natural
- zn64 :: forall (n :: Nat). (KnownNat n, NatWithinBound Word64 n) => Word64 -> Zn64 n
- zn :: forall (n :: Nat). KnownNat n => Natural -> Zn n
- zn64Nat :: forall (m :: Nat) (n :: Nat). (KnownNat m, KnownNat n, NatWithinBound Word64 m, NatWithinBound Word64 n, CmpNat m n ~ 'LT) => Proxy m -> Zn64 n
- znNat :: forall (m :: Nat) (n :: Nat). (KnownNat m, KnownNat n, CmpNat m n ~ 'LT) => Proxy m -> Zn n

# Documentation

data Zn64 (n :: Nat) #

A type level bounded natural backed by a Word64

#### Instances

Instances details

(KnownNat n, NatWithinBound Word64 n) => Integral (Zn64 n) # |
Instance details Defined in Basement.Bounded Methods fromInteger :: Integer -> Zn64 n #
NormalForm (Zn64 n) # |
Instance details Defined in Basement.NormalForm Methods toNormalForm :: Zn64 n -> () #
(KnownNat n, NatWithinBound Word64 n) => Additive (Zn64 n) # |
Instance details Defined in Basement.Numerical.Additive Methods azero :: Zn64 n # (+) :: Zn64 n -> Zn64 n -> Zn64 n # scale :: IsNatural n0 => n0 -> Zn64 n -> Zn64 n #
(KnownNat n, NatWithinBound Word64 n) => IsIntegral (Zn64 n) # |
Instance details Defined in Basement.Bounded Methods toInteger :: Zn64 n -> Integer #
(KnownNat n, NatWithinBound Word64 n) => IsNatural (Zn64 n) # |
Instance details Defined in Basement.Bounded Methods toNatural :: Zn64 n -> Natural #
(KnownNat n, NatWithinBound Word64 n) => Subtractive (Zn64 n) # |
Instance details Defined in Basement.Numerical.Subtractive Associated Types
type Difference (Zn64 n) |
Instance details Defined in Basement.Numerical.Subtractive type Difference (Zn64 n) = Zn64 n
Methods (-) :: Zn64 n -> Zn64 n -> Difference (Zn64 n) #
(KnownNat n, NatWithinBound Word64 n) => Num (Zn64 n) # |
Instance details Defined in Basement.Bounded Methods (+) :: Zn64 n -> Zn64 n -> Zn64 n # (-) :: Zn64 n -> Zn64 n -> Zn64 n # (*) :: Zn64 n -> Zn64 n -> Zn64 n # negate :: Zn64 n -> Zn64 n # abs :: Zn64 n -> Zn64 n # signum :: Zn64 n -> Zn64 n # fromInteger :: Integer -> Zn64 n #
Show (Zn64 n) # |
Instance details Defined in Basement.Bounded Methods showsPrec :: Int -> Zn64 n -> ShowS # show :: Zn64 n -> String # showList :: [Zn64 n] -> ShowS #
Eq (Zn64 n) # |
Instance details Defined in Basement.Bounded Methods (==) :: Zn64 n -> Zn64 n -> Bool # (/=) :: Zn64 n -> Zn64 n -> Bool #
Ord (Zn64 n) # |
Instance details Defined in Basement.Bounded Methods compare :: Zn64 n -> Zn64 n -> Ordering # (<) :: Zn64 n -> Zn64 n -> Bool # (<=) :: Zn64 n -> Zn64 n -> Bool # (>) :: Zn64 n -> Zn64 n -> Bool # (>=) :: Zn64 n -> Zn64 n -> Bool # max :: Zn64 n -> Zn64 n -> Zn64 n # min :: Zn64 n -> Zn64 n -> Zn64 n #
From (Zn64 n) Word128 # |
Instance details Defined in Basement.From Methods from :: Zn64 n -> Word128 #
From (Zn64 n) Word256 # |
Instance details Defined in Basement.From Methods from :: Zn64 n -> Word256 #
(KnownNat n, NatWithinBound Word16 n) => From (Zn64 n) Word16 # |
Instance details Defined in Basement.From Methods from :: Zn64 n -> Word16 #
(KnownNat n, NatWithinBound Word32 n) => From (Zn64 n) Word32 # |
Instance details Defined in Basement.From Methods from :: Zn64 n -> Word32 #
From (Zn64 n) Word64 # |
Instance details Defined in Basement.From Methods from :: Zn64 n -> Word64 #
(KnownNat n, NatWithinBound Word8 n) => From (Zn64 n) Word8 # |
Instance details Defined in Basement.From Methods from :: Zn64 n -> Word8 #
(KnownNat n, NatWithinBound Word64 n) => From (Zn n) (Zn64 n) # |
Instance details Defined in Basement.From Methods from :: Zn n -> Zn64 n #
KnownNat n => From (Zn64 n) (Zn n) # |
Instance details Defined in Basement.From Methods from :: Zn64 n -> Zn n #
type NatNumMaxBound (Zn64 n) # |
Instance details Defined in Basement.Bounded type NatNumMaxBound (Zn64 n) = n
type Difference (Zn64 n) # |
Instance details Defined in Basement.Numerical.Subtractive type Difference (Zn64 n) = Zn64 n

unZn64 :: Zn64 n -> Word64 #

data Zn (n :: Nat) #

A type level bounded natural

#### Instances

Instances details

KnownNat n => Integral (Zn n) # |
Instance details Defined in Basement.Bounded Methods fromInteger :: Integer -> Zn n #
NormalForm (Zn n) # |
Instance details Defined in Basement.NormalForm Methods toNormalForm :: Zn n -> () #
KnownNat n => Additive (Zn n) # |
Instance details Defined in Basement.Numerical.Additive Methods azero :: Zn n # (+) :: Zn n -> Zn n -> Zn n # scale :: IsNatural n0 => n0 -> Zn n -> Zn n #
KnownNat n => IsIntegral (Zn n) # |
Instance details Defined in Basement.Bounded Methods toInteger :: Zn n -> Integer #
KnownNat n => IsNatural (Zn n) # |
Instance details Defined in Basement.Bounded Methods toNatural :: Zn n -> Natural #
KnownNat n => Subtractive (Zn n) # |
Instance details Defined in Basement.Numerical.Subtractive Associated Types
type Difference (Zn n) |
Instance details Defined in Basement.Numerical.Subtractive type Difference (Zn n) = Zn n
Methods (-) :: Zn n -> Zn n -> Difference (Zn n) #
KnownNat n => Num (Zn n) # |
Instance details Defined in Basement.Bounded Methods (+) :: Zn n -> Zn n -> Zn n # (-) :: Zn n -> Zn n -> Zn n # (*) :: Zn n -> Zn n -> Zn n # negate :: Zn n -> Zn n # abs :: Zn n -> Zn n # signum :: Zn n -> Zn n # fromInteger :: Integer -> Zn n #
Show (Zn n) # |
Instance details Defined in Basement.Bounded Methods showsPrec :: Int -> Zn n -> ShowS # show :: Zn n -> String # showList :: [Zn n] -> ShowS #
Eq (Zn n) # |
Instance details Defined in Basement.Bounded Methods (==) :: Zn n -> Zn n -> Bool # (/=) :: Zn n -> Zn n -> Bool #
Ord (Zn n) # |
Instance details Defined in Basement.Bounded Methods compare :: Zn n -> Zn n -> Ordering # (<) :: Zn n -> Zn n -> Bool # (<=) :: Zn n -> Zn n -> Bool # (>) :: Zn n -> Zn n -> Bool # (>=) :: Zn n -> Zn n -> Bool # max :: Zn n -> Zn n -> Zn n # min :: Zn n -> Zn n -> Zn n #
(KnownNat n, NatWithinBound Word128 n) => From (Zn n) Word128 # |
Instance details Defined in Basement.From Methods from :: Zn n -> Word128 #
(KnownNat n, NatWithinBound Word256 n) => From (Zn n) Word256 # |
Instance details Defined in Basement.From Methods from :: Zn n -> Word256 #
(KnownNat n, NatWithinBound Word16 n) => From (Zn n) Word16 # |
Instance details Defined in Basement.From Methods from :: Zn n -> Word16 #
(KnownNat n, NatWithinBound Word32 n) => From (Zn n) Word32 # |
Instance details Defined in Basement.From Methods from :: Zn n -> Word32 #
(KnownNat n, NatWithinBound Word64 n) => From (Zn n) Word64 # |
Instance details Defined in Basement.From Methods from :: Zn n -> Word64 #
(KnownNat n, NatWithinBound Word8 n) => From (Zn n) Word8 # |
Instance details Defined in Basement.From Methods from :: Zn n -> Word8 #
(KnownNat n, NatWithinBound Word64 n) => From (Zn n) (Zn64 n) # |
Instance details Defined in Basement.From Methods from :: Zn n -> Zn64 n #
KnownNat n => From (Zn64 n) (Zn n) # |
Instance details Defined in Basement.From Methods from :: Zn64 n -> Zn n #
type NatNumMaxBound (Zn n) # |
Instance details Defined in Basement.Bounded type NatNumMaxBound (Zn n) = n
type Difference (Zn n) # |
Instance details Defined in Basement.Numerical.Subtractive type Difference (Zn n) = Zn n

unZn :: Zn n -> Natural #

zn64 :: forall (n :: Nat). (KnownNat n, NatWithinBound Word64 n) => Word64 -> Zn64 n #

Create an element of ℤ/nℤ from a Word64

If the value is greater than n, then the value is normalized by using the integer modulus n

zn :: forall (n :: Nat). KnownNat n => Natural -> Zn n #

Create an element of ℤ/nℤ from a Natural.

If the value is greater than n, then the value is normalized by using the integer modulus n

zn64Nat :: forall (m :: Nat) (n :: Nat). (KnownNat m, KnownNat n, NatWithinBound Word64 m, NatWithinBound Word64 n, CmpNat m n ~ 'LT) => Proxy m -> Zn64 n #

Create an element of ℤ/nℤ from a type level Nat

znNat :: forall (m :: Nat) (n :: Nat). (KnownNat m, KnownNat n, CmpNat m n ~ 'LT) => Proxy m -> Zn n #

Create an element of ℤ/nℤ from a type level Nat