Safe Haskell | None |
---|---|
Language | Haskell2010 |
Data.Type.Natural
Synopsis
- type Nat = Natural
- class KnownNat (n :: Nat)
- data SNat (n :: Nat) where
- sNat :: forall (n :: Nat). KnownNat n => SNat n
- sNatP :: forall (n :: Nat) pxy. KnownNat n => pxy n -> SNat n
- toNatural :: forall (n :: Nat). SNat n -> Natural
- data SomeSNat where
- toSomeSNat :: Natural -> SomeSNat
- withSNat :: Natural -> (forall (n :: Nat). KnownNat n => SNat n -> r) -> r
- withKnownNat :: forall (n :: Nat) r. SNat n -> (KnownNat n => r) -> r
- fromSNat :: forall (n :: Nat). SNat n -> Natural
- natVal :: forall (n :: Nat) proxy. KnownNat n => proxy n -> Natural
- natVal' :: forall (n :: Nat). KnownNat n => Proxy# n -> Natural
- someNatVal :: Natural -> SomeNat
- data SomeNat = KnownNat n => SomeNat (Proxy n)
- (%~) :: forall (l :: Nat) (r :: Nat). SNat l -> SNat r -> Equality l r
- data Equality (n :: k) (m :: k) where
- type family (a :: k) === (b :: k) :: Bool where ...
- viewNat :: forall (n :: Nat). SNat n -> ZeroOrSucc n
- zeroOrSucc :: forall (n :: Nat). SNat n -> ZeroOrSucc n
- data ZeroOrSucc (n :: Natural) where
- IsZero :: ZeroOrSucc 0
- IsSucc :: forall (n1 :: Natural). SNat n1 -> ZeroOrSucc (n1 + 1)
- type Succ (n :: Natural) = n + 1
- sSucc :: forall (n :: Nat). SNat n -> SNat (Succ n)
- type S (n :: Natural) = Succ n
- type Pred (n :: Natural) = n - 1
- sPred :: forall (n :: Nat). SNat n -> SNat (Pred n)
- sS :: forall (n :: Nat). SNat n -> SNat (Succ n)
- type Zero = 0
- sZero :: SNat 0
- type One = 1
- sOne :: SNat 1
- type family (a :: Natural) + (b :: Natural) :: Natural where ...
- (%+) :: forall (n :: Nat) (m :: Nat). SNat n -> SNat m -> SNat (n + m)
- type family (a :: Natural) - (b :: Natural) :: Natural where ...
- (%-) :: forall (n :: Nat) (m :: Nat). SNat n -> SNat m -> SNat (n - m)
- type family (a :: Natural) * (b :: Natural) :: Natural where ...
- (%*) :: forall (n :: Nat) (m :: Nat). SNat n -> SNat m -> SNat (n * m)
- type family Div (a :: Natural) (b :: Natural) :: Natural where ...
- sDiv :: forall (n :: Nat) (m :: Nat). SNat n -> SNat m -> SNat (Div n m)
- type family Mod (a :: Natural) (b :: Natural) :: Natural where ...
- sMod :: forall (n :: Nat) (m :: Nat). SNat n -> SNat m -> SNat (Mod n m)
- type family (a :: Natural) ^ (b :: Natural) :: Natural where ...
- (%^) :: forall (n :: Nat) (m :: Nat). SNat n -> SNat m -> SNat (n ^ m)
- type (-.) (n :: Natural) (m :: Natural) = Subt n m (m <=? n)
- (%-.) :: forall (n :: Nat) (m :: Nat). SNat n -> SNat m -> SNat (n -. m)
- type family Log2 (a :: Natural) :: Natural where ...
- sLog2 :: forall (n :: Nat). SNat n -> SNat (Log2 n)
- type (<=?) (m :: k) (n :: k) = OrdCond (Compare m n) 'True 'True 'False
- type (<=) (x :: t) (y :: t) = Assert (x <=? y) (LeErrMsg x y :: Constraint)
- (%<=?) :: forall (n :: Nat) (m :: Nat). SNat n -> SNat m -> SBool (n <=? m)
- type (<?) (n :: Nat) (m :: Nat) = n <? m
- type (<) (n :: Nat) (m :: Nat) = n < m
- (%<?) :: forall (n :: Nat) (m :: Nat). SNat n -> SNat m -> SBool (n <? m)
- type (>=?) (n :: Nat) (m :: Nat) = n >=? m
- type (>=) (n :: Nat) (m :: Nat) = n >= m
- (%>=?) :: forall (n :: Nat) (m :: Nat). SNat n -> SNat m -> SBool (n >=? m)
- type (>?) (n :: Nat) (m :: Nat) = n >? m
- type (>) (n :: Nat) (m :: Nat) = n > m
- (%>?) :: forall (n :: Nat) (m :: Nat). SNat n -> SNat m -> SBool (n >? m)
- type family CmpNat (a :: Natural) (b :: Natural) :: Ordering where ...
- sCmpNat :: forall (n :: Nat) (m :: Nat). SNat n -> SNat m -> SOrdering (CmpNat n m)
- sCompare :: forall (n :: Nat) (m :: Nat). SNat n -> SNat m -> SOrdering (CmpNat n m)
- type Min (m :: Nat) (n :: Nat) = Min m n
- sMin :: forall (n :: Nat) (m :: Nat). SNat n -> SNat m -> SNat (Min n m)
- type Max (m :: Nat) (n :: Nat) = Max m n
- sMax :: forall (n :: Nat) (m :: Nat). SNat n -> SNat m -> SNat (Max n m)
- induction :: forall p (k :: Nat). p 0 -> (forall (n :: Nat). SNat n -> p n -> p (S n)) -> SNat k -> p k
- snat :: QuasiQuoter
- data SBool (b :: Bool) where
- data SOrdering (ord :: Ordering) where
- data OrderingI (a :: k) (b :: k) where
- fromOrderingI :: forall (n :: Natural) (m :: Natural). OrderingI n m -> SOrdering (CmpNat n m)
- toOrderingI :: forall (n :: Natural) (m :: Natural). SOrdering (CmpNat n m) -> OrderingI n m
- type family FlipOrdering (ord :: Ordering) :: Ordering where ...
- sFlipOrdering :: forall (ord :: Ordering). SOrdering ord -> SOrdering (FlipOrdering ord)
Type-level naturals
Nat
, singletons and KnownNat manipulation,
A type synonym for Natural
.
Previously, this was an opaque data type, but it was changed to a type synonym.
Since: base-4.16.0.0
This class gives the integer associated with a type-level natural. There are instances of the class for every concrete literal: 0, 1, 2, etc.
Since: base-4.7.0.0
Minimal complete definition
A value-level witness for a type-level natural number. This is commonly
referred to as a singleton type, as for each n
, there is a single value
that inhabits the type
(aside from bottom).SNat
n
The definition of SNat
is intentionally left abstract. To obtain an SNat
value, use one of the following:
- The
natSing
method ofKnownNat
. - The
SNat
pattern synonym. - The
withSomeSNat
function, which creates anSNat
from aNatural
number.
Since: base-4.18.0.0
Bundled Patterns
pattern Succ :: forall n n1. () => n ~ Succ n1 => SNat n1 -> SNat n | |
pattern Zero :: () => n ~ 0 => SNat n |
Instances
TestCoercion SNat # | Since: base-4.18.0.0 |
Defined in GHC.Internal.TypeNats | |
TestEquality SNat # | Since: base-4.18.0.0 |
Defined in GHC.Internal.TypeNats | |
Show (SNat n) # | Since: base-4.18.0.0 |
Eq (SNat n) # | Since: base-4.19.0.0 |
Ord (SNat n) # | Since: base-4.19.0.0 |
toSomeSNat :: Natural -> SomeSNat Source #
withKnownNat :: forall (n :: Nat) r. SNat n -> (KnownNat n => r) -> r #
someNatVal :: Natural -> SomeNat #
Convert an integer into an unknown type-level natural.
Since: base-4.10.0.0
This type represents unknown type-level natural numbers.
Since: base-4.10.0.0
Pattens and Views
zeroOrSucc :: forall (n :: Nat). SNat n -> ZeroOrSucc n Source #
data ZeroOrSucc (n :: Natural) where Source #
Constructors
IsZero :: ZeroOrSucc 0 | |
IsSucc :: forall (n1 :: Natural). SNat n1 -> ZeroOrSucc (n1 + 1) |
Promtoed and singletonised operations
Arithmetic
type family (a :: Natural) + (b :: Natural) :: Natural where ... infixl 6 #
Addition of type-level naturals.
Since: base-4.7.0.0
type family (a :: Natural) - (b :: Natural) :: Natural where ... infixl 6 #
Subtraction of type-level naturals.
Since: base-4.7.0.0
type family (a :: Natural) * (b :: Natural) :: Natural where ... infixl 7 #
Multiplication of type-level naturals.
Since: base-4.7.0.0
type family Div (a :: Natural) (b :: Natural) :: Natural where ... infixl 7 #
Division (round down) of natural numbers.
Div x 0
is undefined (i.e., it cannot be reduced).
Since: base-4.11.0.0
type family Mod (a :: Natural) (b :: Natural) :: Natural where ... infixl 7 #
Modulus of natural numbers.
Mod x 0
is undefined (i.e., it cannot be reduced).
Since: base-4.11.0.0
type family (a :: Natural) ^ (b :: Natural) :: Natural where ... infixr 8 #
Exponentiation of type-level naturals.
Since: base-4.7.0.0
type (-.) (n :: Natural) (m :: Natural) = Subt n m (m <=? n) infixl 6 Source #
Natural subtraction, truncated to zero if m > n.
type family Log2 (a :: Natural) :: Natural where ... #
Log base 2 (round down) of natural numbers.
Log 0
is undefined (i.e., it cannot be reduced).
Since: base-4.11.0.0
Ordering
type (<=?) (m :: k) (n :: k) = OrdCond (Compare m n) 'True 'True 'False infix 4 #
Comparison (<=) of comparable types, as a function.
Since: base-4.16.0.0
type (<=) (x :: t) (y :: t) = Assert (x <=? y) (LeErrMsg x y :: Constraint) infix 4 #
Comparison (<=) of comparable types, as a constraint.
Since: base-4.16.0.0
type family CmpNat (a :: Natural) (b :: Natural) :: Ordering where ... #
Comparison of type-level naturals, as a function.
Since: base-4.7.0.0
induction :: forall p (k :: Nat). p 0 -> (forall (n :: Nat). SNat n -> p n -> p (S n)) -> SNat k -> p k Source #
QuasiQuotes
snat :: QuasiQuoter Source #
Singletons for auxiliary types
data OrderingI (a :: k) (b :: k) where #
Ordering data type for type literals that provides proof of their ordering.
Since: base-4.16.0.0
Constructors
LTI :: forall {k} (a :: k) (b :: k). Compare a b ~ 'LT => OrderingI a b | |
EQI :: forall {k} (a :: k). Compare a a ~ 'EQ => OrderingI a a | |
GTI :: forall {k} (a :: k) (b :: k). Compare a b ~ 'GT => OrderingI a b |
fromOrderingI :: forall (n :: Natural) (m :: Natural). OrderingI n m -> SOrdering (CmpNat n m) Source #
toOrderingI :: forall (n :: Natural) (m :: Natural). SOrdering (CmpNat n m) -> OrderingI n m Source #
type family FlipOrdering (ord :: Ordering) :: Ordering where ... Source #
Equations
FlipOrdering 'LT = 'GT | |
FlipOrdering 'GT = 'LT | |
FlipOrdering 'EQ = 'EQ |
sFlipOrdering :: forall (ord :: Ordering). SOrdering ord -> SOrdering (FlipOrdering ord) Source #