- 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
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 setFits
Intersectable
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 = cFitsInCR
Defined to satisfy abbreviation.
fitsInCC :: HasCard a => a -> CardinalityConstraint -> BoolSource
fitsInCC = fitsInCR
Defined to satisfy abbreviation.
fitsInCC_T :: HasCardT c => c a -> CardinalityConstraint -> BoolSource
fitsInCC = fitsInCR_T
Defined to satisfy abbreviation.
class HasCardConstr a whereSource
HasCardConstr
= "Has cardinality constraint". In other words, "there
is a capacity constraint for this container".
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 (* -> *)
".
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
.
uContTrans :: from -> toSource
"u-" prefix stands for "unsafe-"
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
(* -> *)
.
uContTransT :: from a -> to aSource
"u-" prefix stands for "unsafe-"
uContError :: TransformError_FromTypeName -> TransformError_ToTypeName -> TransformError_Details -> aSource
This error is used by
typeclass instances in cases when HasCardUCT
from
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 uContTrans
from
don't
fit in to
If
instaniated
correctly, then HasCardUCT
should never allow
sContTrans
to be called by subject instance. It should return uContError
Nothing
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 uContErrorT
Nothing
instead.