| Copyright | (C) 2015 mniip |
|---|---|
| License | BSD3 |
| Maintainer | mniip <mniip@mniip.com> |
| Stability | experimental |
| Portability | portable |
| Safe Haskell | Safe |
| Language | Haskell2010 |
Data.Finite
Description
- data Finite n
- packFinite :: KnownNat n => Integer -> Maybe (Finite n)
- packFiniteProxy :: KnownNat n => proxy n -> Integer -> Maybe (Finite n)
- finite :: KnownNat n => Integer -> Finite n
- finiteProxy :: KnownNat n => proxy n -> Integer -> Finite n
- getFinite :: Finite n -> Integer
- equals :: Finite n -> Finite m -> Bool
- cmp :: Finite n -> Finite m -> Ordering
- natToFinite :: (KnownNat n, KnownNat m, (n + 1) <= m) => proxy n -> Finite m
- weaken :: Finite n -> Finite (n + 1)
- strengthen :: KnownNat n => Finite (n + 1) -> Maybe (Finite n)
- shift :: Finite n -> Finite (n + 1)
- unshift :: Finite (n + 1) -> Maybe (Finite n)
- weakenN :: n <= m => Finite n -> Finite m
- strengthenN :: (KnownNat n, n <= m) => Finite m -> Maybe (Finite n)
- shiftN :: (KnownNat n, KnownNat m, n <= m) => Finite n -> Finite m
- unshiftN :: (KnownNat n, KnownNat m, n <= m) => Finite m -> Maybe (Finite n)
- weakenProxy :: proxy k -> Finite n -> Finite (n + k)
- strengthenProxy :: KnownNat n => proxy k -> Finite (n + k) -> Maybe (Finite n)
- shiftProxy :: KnownNat k => proxy k -> Finite n -> Finite (n + k)
- unshiftProxy :: KnownNat k => proxy k -> Finite (n + k) -> Maybe (Finite n)
- add :: Finite n -> Finite m -> Finite (n + m)
- sub :: Finite n -> Finite m -> Either (Finite m) (Finite n)
- multiply :: Finite n -> Finite m -> Finite (n * m)
- combineSum :: KnownNat n => Either (Finite n) (Finite m) -> Finite (n + m)
- combineProduct :: KnownNat n => (Finite n, Finite m) -> Finite (n * m)
- separateSum :: KnownNat n => Finite (n + m) -> Either (Finite n) (Finite m)
- separateProduct :: KnownNat n => Finite (n * m) -> (Finite n, Finite m)
- isValidFinite :: KnownNat n => Finite n -> Bool
Documentation
Finite number type. is inhabited by exactly Finite nn values. Invariants:
getFinite x < natVal x
getFinite x >= 0
packFiniteProxy :: KnownNat n => proxy n -> Integer -> Maybe (Finite n) Source
Same as packFinite but with a proxy argument to avoid type signatures.
finiteProxy :: KnownNat n => proxy n -> Integer -> Finite n Source
Same as finite but with a proxy argument to avoid type signatures.
equals :: Finite n -> Finite m -> Bool infix 4 Source
Test two different types of finite numbers for equality.
natToFinite :: (KnownNat n, KnownNat m, (n + 1) <= m) => proxy n -> Finite m Source
Convert a type-level literal into a Finite.
strengthen :: KnownNat n => Finite (n + 1) -> Maybe (Finite n) Source
Remove one inhabitant from the end. Returns Nothing if the input was the removed inhabitant.
shift :: Finite n -> Finite (n + 1) Source
Add one inhabitant in the beginning, shifting everything up by one.
unshift :: Finite (n + 1) -> Maybe (Finite n) Source
Remove one inhabitant from the beginning, shifting everything down by one. Returns Nothing if the input was the removed inhabitant.
strengthenN :: (KnownNat n, n <= m) => Finite m -> Maybe (Finite n) Source
Remove multiple inhabitants from the end. Returns Nothing if the input was one of the removed inhabitants.
shiftN :: (KnownNat n, KnownNat m, n <= m) => Finite n -> Finite m Source
Add multiple inhabitant in the beginning, shifting everything up by the amount of inhabitants added.
unshiftN :: (KnownNat n, KnownNat m, n <= m) => Finite m -> Maybe (Finite n) Source
Remove multiple inhabitants from the beginning, shifting everything down by the amount of inhabitants removed. Returns Nothing if the input was one of the removed inhabitants.
weakenProxy :: proxy k -> Finite n -> Finite (n + k) Source
combineSum :: KnownNat n => Either (Finite n) (Finite m) -> Finite (n + m) Source
Left-biased (left values come first) disjoint union of finite sets.
combineProduct :: KnownNat n => (Finite n, Finite m) -> Finite (n * m) Source
fst-biased (fst is the inner, and snd is the outer iteratee) product of finite sets.
separateSum :: KnownNat n => Finite (n + m) -> Either (Finite n) (Finite m) Source
Take a Left-biased disjoint union apart.
separateProduct :: KnownNat n => Finite (n * m) -> (Finite n, Finite m) Source
Take a fst-biased product apart.
isValidFinite :: KnownNat n => Finite n -> Bool Source
Verifies that a given Finite is valid. Should always return True unles you bring the Data.Finite.Internal.Finite constructor into the scope, or use unsafeCoerce or other nasty hacks