Data.CardinalityRange
- type CardinalityRange_From = LazyCardinality
- type CardinalityRange_To = LazyCardinality
- data CardinalityRange
- cardinalityRange :: CardinalityRange_From -> CardinalityRange_To -> CardinalityRange
- cr2Tuple :: CardinalityRange -> (CardinalityRange_From, CardinalityRange_From)
- lazyVerfyCR :: CardinalityRange_From -> CardinalityRange_To -> Maybe Bool
- cFitsInCR_Proto :: LazyCardinality -> CardinalityRange -> (Ordering, LazyCardinality, CardinalityRange)
- cFitsInCR :: LazyCardinality -> CardinalityRange -> Bool
- fitsInCR :: HasCard a => a -> CardinalityRange -> Bool
- fitsInCR_T :: HasCardT c => c a -> CardinalityRange -> Bool
- data FirstOrSecond
- data Compare2CRsError = LowerBoundaryAfterHigher FirstOrSecond CardinalityRange
- compare2CRs :: CardinalityRange -> CardinalityRange -> (Either Compare2CRsError (SetsFit CardinalityRange), CardinalityRange, CardinalityRange)
- crFitsInCR :: CardinalityRange -> CardinalityRange -> SetsFit CardinalityRange
- crNoConstraint :: CardinalityRange
- cr0 :: CardinalityRange
- cr1 :: CardinalityRange
- cr0_1 :: CardinalityRange
- cr0_Inf :: CardinalityRange
- cr1_Inf :: CardinalityRange
- crX :: PreciseCardinality -> CardinalityRange
- crXY :: PreciseCardinality -> PreciseCardinality -> CardinalityRange
- type CardinalityConstraint = CardinalityRange
- cFitsInCC :: LazyCardinality -> CardinalityConstraint -> Bool
- fitsInCC :: HasCard a => a -> CardinalityConstraint -> Bool
- fitsInCC_T :: HasCardT c => c a -> CardinalityConstraint -> Bool
- class HasCardConstr a where
- class HasCardConstrT c where
- cFitsIn :: HasCardConstr b => LazyCardinality -> b -> Bool
- cFitsInT :: HasCardConstrT c => LazyCardinality -> c b -> Bool
- fitsIn :: (HasCard a, HasCardConstr b) => a -> b -> Bool
- fitsInT :: (HasCardT c, HasCardConstrT d) => c a -> d b -> Bool
- class HasCardUCT from to where
- uContTrans :: from -> to
- class HasCardUCT_T from to where
- uContTransT :: from a -> to a
- type TransformError_FromTypeName = String
- type TransformError_ToTypeName = String
- type TransformError_Details = String
- uContError :: TransformError_FromTypeName -> TransformError_ToTypeName -> TransformError_Details -> a
- uContErrorT :: TransformError_FromTypeName -> TransformError_ToTypeName -> TransformError_Details -> a
- sContTrans :: (HasCard from, HasCardConstr to, HasCardUCT from to) => from -> Maybe to
- sContTransT :: (HasCardT from, HasCardConstrT to, HasCardUCT_T from to) => from a -> Maybe (to a)
Core
data CardinalityRange Source
Constructor: cardinalityRange CardinalityRange_From CardinalityRange_To
cardinalityRange :: CardinalityRange_From -> CardinalityRange_To -> CardinalityRangeSource
CardinalityRange data constructor. The range is always including it's
boundaries. F.e., range
contains
cardinalities [1,2,3,4].
First cardinality MUST always be less or equal to second one. However,
we do not fully guard from such type of error - we do not refine
CardinalityRange (preciseC 1) (preciseC 4), if it participates in the constriction.
refinableC
cFitsInCR_Proto :: LazyCardinality -> CardinalityRange -> (Ordering, LazyCardinality, CardinalityRange)Source
Root prototype for all subsequent "FitsIn" functions. Returns probably
refined cardinality and range, which is useful for reuse.
If returns EQ then subject cardinality
is between boundaries (including) of cardinality range.
cFitsInCR :: LazyCardinality -> CardinalityRange -> BoolSource
fits in LazyCardinality?
CardinalityRange
fitsInCR_T :: HasCardT c => c a -> CardinalityRange -> BoolSource
Wrapper around .
cFitsInCR
data Compare2CRsError Source
Error, that may occur, when performing compare2CRs
Constructors
| LowerBoundaryAfterHigher FirstOrSecond CardinalityRange |
Instances
compare2CRs :: CardinalityRange -> CardinalityRange -> (Either Compare2CRsError (SetsFit CardinalityRange), CardinalityRange, CardinalityRange)Source
This function is made hard, but fast. It tends to make minimal amount of comparisons, reusing refinements.
crFitsInCR :: CardinalityRange -> CardinalityRange -> SetsFit CardinalityRangeSource
Wrapper around of typeclass setFitsIntersectable
Popular cardinality ranges constructors
crNoConstraint :: CardinalityRangeSource
Same as .
cr0_Inf
Only zero elements.
Only one element.
cr0_1 :: CardinalityRangeSource
Zero or one element.
cr0_Inf :: CardinalityRangeSource
Any count of elements.
cr1_Inf :: CardinalityRangeSource
Any nonzero count of elements.
crX :: PreciseCardinality -> CardinalityRangeSource
Concrete count of elements.
crXY :: PreciseCardinality -> PreciseCardinality -> CardinalityRangeSource
A concrete range.
Application 1
cFitsInCC :: LazyCardinality -> CardinalityConstraint -> BoolSource
cFitsInCC = cFitsInCRDefined to satisfy abbreviation.
fitsInCC :: HasCard a => a -> CardinalityConstraint -> BoolSource
fitsInCC = fitsInCRDefined to satisfy abbreviation.
fitsInCC_T :: HasCardT c => c a -> CardinalityConstraint -> BoolSource
fitsInCC = fitsInCR_TDefined to satisfy abbreviation.
class HasCardConstr a whereSource
HasCardConstr = "Has cardinality constraint". In other words, "there
is a capacity constraint for this container".
Methods
Instances
| HasCardConstr () | |
| HasCardConstr [a] | |
| HasCardConstr (Maybe a) | |
| HasCardConstr (Identity a) | |
| HasCardConstr (NeverEmptyList a) | |
| HasCardConstr (EmptySet a) | |
| HasCardConstr (a, a) | |
| HasCardConstr (Map k e) | |
| HasCardConstr (a, a, a) | |
| HasCardConstr (a, a, a, a) | |
| HasCardConstr (a, a, a, a, a) | |
| HasCardConstr (a, a, a, a, a, a) | |
| HasCardConstr (a, a, a, a, a, a, a) | |
| HasCardConstr (a, a, a, a, a, a, a, a) | |
| HasCardConstr (a, a, a, a, a, a, a, a, a) | |
| HasCardConstr (a, a, a, a, a, a, a, a, a, a) | |
| HasCardConstr (a, a, a, a, a, a, a, a, a, a, a) |
class HasCardConstrT c whereSource
HasCardConstrT = "Has cardinality constraint (for container types of
kind (* -> *))".
In other words, "there is a capacity constraint for this container type
of kind (* -> *)".
Methods
cardinalityConstraintOfT :: c a -> CardinalityConstraintSource
cFitsIn :: HasCardConstr b => LazyCardinality -> b -> BoolSource
Wrapper around .
cFitsInCC
cFitsInT :: HasCardConstrT c => LazyCardinality -> c b -> BoolSource
Wrapper around .
cFitsInCC
Application 2
class HasCardUCT from to whereSource
HasCardUCT = "Has cardinality-unsafe container transform".
Define transform that may thow an error, if contents of from don't fit
in to .
Instances
| HasCardUCT () [a] | |
| HasCardUCT () (Maybe a) | |
| HasCardUCT () (EmptySet a) | |
| HasCardUCT () (Map k e) | |
| HasCardUCT [a] () | |
| HasCardUCT (Maybe a) () | |
| HasCardUCT (EmptySet a) () | |
| HasCardUCT [a] (NeverEmptyList a) | |
| HasCardUCT [a] (Maybe a) | |
| HasCardUCT [a] (Identity a) | |
| HasCardUCT [a] (EmptySet a) | |
| HasCardUCT (Maybe a) (NeverEmptyList a) | |
| HasCardUCT (Maybe a) [a] | |
| HasCardUCT (Maybe a) (Identity a) | |
| HasCardUCT (Maybe a) (EmptySet a) | |
| HasCardUCT (Identity a) (NeverEmptyList a) | |
| HasCardUCT (Identity a) [a] | |
| HasCardUCT (Identity a) (Maybe a) | |
| HasCardUCT (NeverEmptyList a) [a] | |
| HasCardUCT (NeverEmptyList a) (Maybe a) | |
| HasCardUCT (NeverEmptyList a) (Identity a) | |
| HasCardUCT (EmptySet a) [a] | |
| HasCardUCT (EmptySet a) (Maybe a) | |
| Ord k => HasCardUCT [(k, e)] (Map k e) | |
| HasCardUCT [a] (a, a) | |
| HasCardUCT (Maybe (k, e)) (Map k e) | |
| HasCardUCT (Identity (k, e)) (Map k e) | |
| Ord k => HasCardUCT (NeverEmptyList (k, e)) (Map k e) | |
| HasCardUCT (EmptySet (k, e)) (Map k e) | |
| HasCardUCT [a] (a, a, a) | |
| HasCardUCT [a] (a, a, a, a) | |
| HasCardUCT [a] (a, a, a, a, a) | |
| HasCardUCT [a] (a, a, a, a, a, a) | |
| HasCardUCT [a] (a, a, a, a, a, a, a) | |
| HasCardUCT [a] (a, a, a, a, a, a, a, a) | |
| HasCardUCT [a] (a, a, a, a, a, a, a, a, a) | |
| HasCardUCT [a] (a, a, a, a, a, a, a, a, a, a) | |
| HasCardUCT [a] (a, a, a, a, a, a, a, a, a, a, a) | |
| HasCardUCT (Map k e) () | |
| HasCardUCT (a, a) [a] | |
| HasCardUCT (Map k e) (NeverEmptyList (k, e)) | |
| HasCardUCT (Map k e) [(k, e)] | |
| HasCardUCT (Map k e) (Maybe (k, e)) | |
| HasCardUCT (Map k e) (Identity (k, e)) | |
| HasCardUCT (Map k e) (EmptySet (k, e)) | |
| HasCardUCT (k, e) (Map k e) | |
| HasCardUCT (Map k e) (k, e) | |
| HasCardUCT (a, a, a) [a] | |
| HasCardUCT (a, a, a, a) [a] | |
| HasCardUCT (a, a, a, a, a) [a] | |
| HasCardUCT (a, a, a, a, a, a) [a] | |
| HasCardUCT (a, a, a, a, a, a, a) [a] | |
| HasCardUCT (a, a, a, a, a, a, a, a) [a] | |
| HasCardUCT (a, a, a, a, a, a, a, a, a) [a] | |
| HasCardUCT (a, a, a, a, a, a, a, a, a, a) [a] | |
| HasCardUCT (a, a, a, a, a, a, a, a, a, a, a) [a] |
class HasCardUCT_T from to whereSource
HasCardUCT_T = "Has cardinality-unsafe container
transform (for container types of kind (* -> *))".
Same thing as , but for containers of kind HasCardUCT(* -> *).
Instances
uContError :: TransformError_FromTypeName -> TransformError_ToTypeName -> TransformError_Details -> aSource
This error is used by
typeclass instances in cases when HasCardUCTfrom container's contents
don't fit in to container.
uContErrorT :: TransformError_FromTypeName -> TransformError_ToTypeName -> TransformError_Details -> aSource
Same as , but for use in
uContError typeclass instances
HasCardUCT_T
sContTrans :: (HasCard from, HasCardConstr to, HasCardUCT from to) => from -> Maybe toSource
A wrapper around . Contrary to it, where "u-" prefix stands
for "unsafe-", here "s-" prefix stands for "safe-".
This is aimed to localize and exclude case, when contents of uContTransfrom don't
fit in to If instaniated
correctly, then HasCardUCT should never allow
sContTrans to be called by subject instance. It should return uContErrorNothing
instead.
sContTransT :: (HasCardT from, HasCardConstrT to, HasCardUCT_T from to) => from a -> Maybe (to a)Source
A wrapper around . Contrary to it, where "u-" prefix stands
for "unsafe-", here "s-" prefix stands for "safe-".
This is aimed to localize and exclude case, when contents of uContTransT(from a) don't
fit in (to a) . If instaniated
correctly, then HasCardUCT_T should never allow
sContTransT to be called by subject instance. It should return uContErrorTNothing
instead.