Cardinality-0.1: Measure container capacity. Use it to safely change container.

Data.CardinalityRange

Contents

Synopsis

Core

cardinalityRange :: CardinalityRange_From -> CardinalityRange_To -> CardinalityRangeSource

CardinalityRange data constructor. The range is always including it's boundaries. F.e., range CardinalityRange (preciseC 1) (preciseC 4) 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 refinableC, if it participates in the constriction.

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.

fitsInCR :: HasCard a => a -> CardinalityRange -> BoolSource

Wrapper around cFitsInCR.

fitsInCR_T :: HasCardT c => c a -> CardinalityRange -> BoolSource

Wrapper around cFitsInCR.

data FirstOrSecond Source

Constructors

First 
Second 

Instances

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.

Popular cardinality ranges constructors

cr0 :: CardinalityRangeSource

Only zero elements.

cr1 :: CardinalityRangeSource

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.

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".

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 (* -> *)".

cFitsIn :: HasCardConstr b => LazyCardinality -> b -> BoolSource

Wrapper around cFitsInCC.

cFitsInT :: HasCardConstrT c => LazyCardinality -> c b -> BoolSource

Wrapper around cFitsInCC.

fitsIn :: (HasCard a, HasCardConstr b) => a -> b -> BoolSource

Wrapper around cFitsInCC.

fitsInT :: (HasCardT c, HasCardConstrT d) => c a -> d 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 .

Methods

uContTrans :: from -> toSource

"u-" prefix stands for "unsafe-"

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 HasCardUCT, but for containers of kind (* -> *).

Methods

uContTransT :: from a -> to aSource

"u-" prefix stands for "unsafe-"

uContError :: TransformError_FromTypeName -> TransformError_ToTypeName -> TransformError_Details -> aSource

This error is used by HasCardUCT typeclass instances in cases when from container's contents don't fit in to container.

sContTrans :: (HasCard from, HasCardConstr to, HasCardUCT from to) => from -> Maybe toSource

A wrapper around uContTrans. 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 from don't fit in to If HasCardUCT instaniated correctly, then sContTrans should never allow uContError to be called by subject instance. It should return Nothing instead.

sContTransT :: (HasCardT from, HasCardConstrT to, HasCardUCT_T from to) => from a -> Maybe (to a)Source

A wrapper around uContTransT. 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 (from a) don't fit in (to a) . If HasCardUCT_T instaniated correctly, then sContTransT should never allow uContErrorT to be called by subject instance. It should return Nothing instead.