- 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
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.
Uses
function.
almostStrictCompare2LCs
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.