Safe Haskell | Safe-Infered |
---|
- data Numbering a = UnsafeMkNumbering {}
- enumNu :: Enum a => a -> a -> Numbering a
- enumNu' :: Enum a => Int -> Int -> Numbering a
- nuFromSet :: Map Int ignored -> Numbering Int
- nuFromDistinctVector :: (Ord a, Show a, Vector v a) => v a -> Numbering a
- nuFromDistinctVectorG :: (Show a, Vector v a) => map -> ((a -> Int -> Int -> t) -> a -> Int -> map -> map) -> (a -> map -> Maybe Int) -> v a -> Numbering a
- nuFromDistinctList :: (Ord a, Show a) => [a] -> Numbering a
- nuFromDistinctUnboxList :: (Ord a, Show a, Unbox a) => [a] -> Numbering a
- nuFromDistinctIntList :: [Int] -> Numbering Int
- nuFromList :: (Ord a, Show a) => [a] -> Numbering a
- nuFromUnboxList :: (Ord a, Show a, Unbox a) => [a] -> Numbering a
- nuFromIntList :: [Int] -> Numbering Int
- finiteTypeNu :: (Enum a, Bounded a) => Numbering a
- idNu :: Int -> Numbering Int
- sumNu :: (a1 -> a) -> (a2 -> a) -> ((a1 -> Int) -> (a2 -> Int) -> a -> Int) -> Numbering a1 -> Numbering a2 -> Numbering a
- eitherNu :: Numbering a -> Numbering b -> Numbering (Either a b)
- prodNu :: (a -> a2) -> (a -> a1) -> (a2 -> a1 -> a) -> Numbering a2 -> Numbering a1 -> Numbering a
- pairNu :: Numbering a -> Numbering b -> Numbering (a, b)
- nuIndices :: Numbering a -> [Int]
- nuElements :: Numbering a -> [a]
- data NumberingBrokenInvariantException a = NumberingBrokenInvariantException {}
- checkNu :: Numbering a -> Either (NumberingBrokenInvariantException a) ()
Documentation
Invariant: For all i
in [ 0 ..
, nuLength
- 1 ]
.
toInt
(fromInt
i) == i
This implies that for all a
of the form
(with fromInt
ii
in [ 0 ..
), nuLength
- 1 ]
.
fromInt
(toInt
a) = a
The behaviour of fromInt
for out-of-bounds indices and that of toInt
for elements not occuring in the numbering is undefined.
Construction
enumNu :: Enum a => a -> a -> Numbering aSource
enumNu a b
creates a numbering of the elements [a .. b]
(inclusively).
enumNu' :: Enum a => Int -> Int -> Numbering aSource
enumNu' i j
creates a numbering of the elements [toEnum i .. toEnum j]
(inclusively).
nuFromDistinctVector :: (Ord a, Show a, Vector v a) => v a -> Numbering aSource
The distinctness precondition is checked (we have to create a map anyway).
:: (Show a, Vector v a) | |
=> map |
|
-> ((a -> Int -> Int -> t) -> a -> Int -> map -> map) |
|
-> (a -> map -> Maybe Int) |
|
-> v a | |
-> Numbering a |
Allows customization of the map type used.
nuFromDistinctList :: (Ord a, Show a) => [a] -> Numbering aSource
See nuFromDistinctVector
.
nuFromDistinctIntList :: [Int] -> Numbering IntSource
nuFromList :: (Ord a, Show a) => [a] -> Numbering aSource
Uniquifies the input first (resulting in an unspecified order).
nuFromUnboxList :: (Ord a, Show a, Unbox a) => [a] -> Numbering aSource
Uniquifies the input first (resulting in an unspecified order).
nuFromIntList :: [Int] -> Numbering IntSource
Uniquifies the input first (resulting in an unspecified order).
finiteTypeNu :: (Enum a, Bounded a) => Numbering aSource
Combination
:: (a1 -> a) |
|
-> (a2 -> a) |
|
-> ((a1 -> Int) -> (a2 -> Int) -> a -> Int) |
|
-> Numbering a1 | |
-> Numbering a2 | |
-> Numbering a |
Creates a numbering for an Either
-like type, given numberings for the summand types.
:: (a -> a2) |
|
-> (a -> a1) |
|
-> (a2 -> a1 -> a) |
|
-> Numbering a2 | |
-> Numbering a1 | |
-> Numbering a |
Creates a numbering for an pair-like type, given numberings for the component types.
Destruction
nuElements :: Numbering a -> [a]Source