Ranged-sets-0.2.1: Ranged sets for HaskellSource codeContentsIndex
Data.Ranged.RangedSet
Contents
Ranged Set Type
Ranged Set construction functions and their preconditions
Predicates
Set Operations
Useful Sets
QuickCheck Properties
Construction
Basic Operations
Some Identities and Inequalities
Synopsis
data DiscreteOrdered v => RSet v
rSetRanges :: RSet v -> [Range v]
makeRangedSet :: DiscreteOrdered v => [Range v] -> RSet v
unsafeRangedSet :: DiscreteOrdered v => [Range v] -> RSet v
validRangeList :: DiscreteOrdered v => [Range v] -> Bool
normaliseRangeList :: DiscreteOrdered v => [Range v] -> [Range v]
rSingleton :: DiscreteOrdered v => v -> RSet v
rSetUnfold :: DiscreteOrdered a => Boundary a -> (Boundary a -> Boundary a) -> (Boundary a -> Maybe (Boundary a)) -> RSet a
rSetIsEmpty :: DiscreteOrdered v => RSet v -> Bool
rSetIsFull :: DiscreteOrdered v => RSet v -> Bool
(-?-) :: DiscreteOrdered v => RSet v -> v -> Bool
(-<=-) :: DiscreteOrdered v => RSet v -> RSet v -> Bool
(-<-) :: DiscreteOrdered v => RSet v -> RSet v -> Bool
(-\/-) :: DiscreteOrdered v => RSet v -> RSet v -> RSet v
(-/\-) :: DiscreteOrdered v => RSet v -> RSet v -> RSet v
(-!-) :: DiscreteOrdered v => RSet v -> RSet v -> RSet v
rSetNegation :: DiscreteOrdered a => RSet a -> RSet a
rSetEmpty :: DiscreteOrdered a => RSet a
rSetFull :: DiscreteOrdered a => RSet a
prop_validNormalised :: DiscreteOrdered a => [Range a] -> Bool
prop_has :: DiscreteOrdered a => [Range a] -> a -> Bool
prop_unfold :: Integer -> Bool
prop_union :: DiscreteOrdered a => RSet a -> RSet a -> a -> Bool
prop_intersection :: DiscreteOrdered a => RSet a -> RSet a -> a -> Bool
prop_difference :: DiscreteOrdered a => RSet a -> RSet a -> a -> Bool
prop_negation :: DiscreteOrdered a => RSet a -> a -> Bool
prop_not_empty :: DiscreteOrdered a => RSet a -> a -> Property
prop_empty :: DiscreteOrdered a => a -> Bool
prop_full :: DiscreteOrdered a => a -> Bool
prop_empty_intersection :: DiscreteOrdered a => RSet a -> Bool
prop_full_union :: DiscreteOrdered a => RSet a -> Bool
prop_union_superset :: DiscreteOrdered a => RSet a -> RSet a -> Bool
prop_intersection_subset :: DiscreteOrdered a => RSet a -> RSet a -> Bool
prop_diff_intersect :: DiscreteOrdered a => RSet a -> RSet a -> Bool
prop_subset :: DiscreteOrdered a => RSet a -> Bool
prop_strict_subset :: DiscreteOrdered a => RSet a -> Bool
prop_union_strict_superset :: DiscreteOrdered a => RSet a -> RSet a -> Property
prop_intersection_commutes :: DiscreteOrdered a => RSet a -> RSet a -> Bool
prop_union_commutes :: DiscreteOrdered a => RSet a -> RSet a -> Bool
prop_intersection_associates :: DiscreteOrdered a => RSet a -> RSet a -> RSet a -> Bool
prop_union_associates :: DiscreteOrdered a => RSet a -> RSet a -> RSet a -> Bool
prop_de_morgan_intersection :: DiscreteOrdered a => RSet a -> RSet a -> Bool
prop_de_morgan_union :: DiscreteOrdered a => RSet a -> RSet a -> Bool
Ranged Set Type
data DiscreteOrdered v => RSet v Source
An RSet (for Ranged Set) is a list of ranges. The ranges must be sorted and not overlap.
show/hide Instances
rSetRanges :: RSet v -> [Range v]Source
Ranged Set construction functions and their preconditions
makeRangedSet :: DiscreteOrdered v => [Range v] -> RSet vSource
Create a new Ranged Set from a list of ranges. The list may contain ranges that overlap or are not in ascending order.
unsafeRangedSet :: DiscreteOrdered v => [Range v] -> RSet vSource
Create a new Ranged Set from a list of ranges. validRangeList ranges must return True. This precondition is not checked.
validRangeList :: DiscreteOrdered v => [Range v] -> BoolSource
Determine if the ranges in the list are both in order and non-overlapping. If so then they are suitable input for the unsafeRangedSet function.
normaliseRangeList :: DiscreteOrdered v => [Range v] -> [Range v]Source
Rearrange and merge the ranges in the list so that they are in order and non-overlapping.
rSingleton :: DiscreteOrdered v => v -> RSet vSource
Create a Ranged Set from a single element.
rSetUnfoldSource
:: DiscreteOrdered a
=> Boundary aA first lower boundary.
-> Boundary a -> Boundary aA function from a lower boundary to an upper boundary, which must return a result greater than the argument (not checked).
-> Boundary a -> Maybe (Boundary a)A function from a lower boundary to Maybe the successor lower boundary, which must return a result greater than the argument (not checked). If ranges overlap then they will be merged.
-> RSet a
Construct a range set.
Predicates
rSetIsEmpty :: DiscreteOrdered v => RSet v -> BoolSource
True if the set has no members.
rSetIsFull :: DiscreteOrdered v => RSet v -> BoolSource
True if the negation of the set has no members.
(-?-) :: DiscreteOrdered v => RSet v -> v -> BoolSource
True if the value is within the ranged set. Infix precedence is left 5.
(-<=-) :: DiscreteOrdered v => RSet v -> RSet v -> BoolSource

True if the first argument is a subset of the second argument, or is equal.

Infix precedence is left 5.

(-<-) :: DiscreteOrdered v => RSet v -> RSet v -> BoolSource

True if the first argument is a strict subset of the second argument.

Infix precedence is left 5.

Set Operations
(-\/-) :: DiscreteOrdered v => RSet v -> RSet v -> RSet vSource
Set union for ranged sets. Infix precedence is left 6.
(-/\-) :: DiscreteOrdered v => RSet v -> RSet v -> RSet vSource
Set intersection for ranged sets. Infix precedence is left 7.
(-!-) :: DiscreteOrdered v => RSet v -> RSet v -> RSet vSource
Set difference. Infix precedence is left 6.
rSetNegation :: DiscreteOrdered a => RSet a -> RSet aSource
Set negation.
Useful Sets
rSetEmpty :: DiscreteOrdered a => RSet aSource
The empty set.
rSetFull :: DiscreteOrdered a => RSet aSource
The set that contains everything.
QuickCheck Properties
Construction
prop_validNormalised :: DiscreteOrdered a => [Range a] -> BoolSource

A normalised range list is valid for unsafeRangedSet

 prop_validNormalised ls = validRangeList $ normaliseRangeList ls
prop_has :: DiscreteOrdered a => [Range a] -> a -> BoolSource

Iff a value is in a range list then it is in a ranged set constructed from that list.

 prop_has ls v = (ls `rangeListHas` v) == makeRangedSet ls -?- v
prop_unfold :: Integer -> BoolSource

Verifies the correct membership of a set containing all integers starting with the digit "1" up to 19999.

 prop_unfold = (v <= 99999 && head (show v) == '1') == (initial1 -?- v)
    where
       initial1 = rSetUnfold (BoundaryBelow 1) addNines times10
       addNines (BoundaryBelow n) = BoundaryAbove $ n * 2 - 1
       times10 (BoundaryBelow n) = 
          if n <= 1000 then Just $ BoundaryBelow $ n * 10 else Nothing
Basic Operations
prop_union :: DiscreteOrdered a => RSet a -> RSet a -> a -> BoolSource

Iff a value is in either of two ranged sets then it is in the union of those two sets.

 prop_union rs1 rs2 v = 
    (rs1 -?- v || rs2 -?- v) == ((rs1 -\/- rs2) -?- v)
prop_intersection :: DiscreteOrdered a => RSet a -> RSet a -> a -> BoolSource

Iff a value is in both of two ranged sets then it is n the intersection of those two sets.

 prop_intersection rs1 rs2 v =
    (rs1 -?- v && rs2 -?- v) == ((rs1 -/\- rs2) -?- v)
prop_difference :: DiscreteOrdered a => RSet a -> RSet a -> a -> BoolSource

Iff a value is in ranged set 1 and not in ranged set 2 then it is in the difference of the two.

 prop_difference rs1 rs2 v =
    (rs1 -?- v && not (rs2 -?- v)) == ((rs1 -!- rs2) -?- v)
prop_negation :: DiscreteOrdered a => RSet a -> a -> BoolSource

Iff a value is not in a ranged set then it is in its negation.

 prop_negation rs v = rs -?- v == not (rSetNegation rs -?- v)
prop_not_empty :: DiscreteOrdered a => RSet a -> a -> PropertySource

A set that contains a value is not empty

 prop_not_empty rs v = (rs -?- v) ==> not (rSetIsEmpty rs)
Some Identities and Inequalities
prop_empty :: DiscreteOrdered a => a -> BoolSource

The empty set has no members.

 prop_empty v = not (rSetEmpty -?- v)
prop_full :: DiscreteOrdered a => a -> BoolSource

The full set has every member.

 prop_full v = rSetFull -?- v
prop_empty_intersection :: DiscreteOrdered a => RSet a -> BoolSource

The intersection of a set with its negation is empty.

 prop_empty_intersection rs =
    rSetIsEmpty (rs -/\- rSetNegation rs)
prop_full_union :: DiscreteOrdered a => RSet a -> BoolSource

The union of a set with its negation is full.

 prop_full_union rs v =
    rSetIsFull (rs -\/- rSetNegation rs)
prop_union_superset :: DiscreteOrdered a => RSet a -> RSet a -> BoolSource

The union of two sets is the non-strict superset of both.

 prop_union_superset rs1 rs2 =
    rs1 -<=- u && rs2 -<=- u
    where
       u = rs1 -\/- rs2
prop_intersection_subset :: DiscreteOrdered a => RSet a -> RSet a -> BoolSource

The intersection of two sets is the non-strict subset of both.

 prop_intersection_subset rs1 rs2 =
    i -<=- rs1 && i -<=- rs2
    where
       i = rs1 -/\- rs2
prop_diff_intersect :: DiscreteOrdered a => RSet a -> RSet a -> BoolSource

The difference of two sets intersected with the subtractand is empty.

 prop_diff_intersect rs1 rs2 =
    rSetIsEmpty ((rs1 -!- rs2) -/\- rs2)
prop_subset :: DiscreteOrdered a => RSet a -> BoolSource

A set is the non-strict subset of itself.

 prop_subset rs = rs -<=- rs
prop_strict_subset :: DiscreteOrdered a => RSet a -> BoolSource

A set is not the strict subset of itself.

 prop_strict_subset rs = not (rs -<- rs)
prop_union_strict_superset :: DiscreteOrdered a => RSet a -> RSet a -> PropertySource

If rs1 - rs2 is not empty then the union of rs1 and rs2 will be a strict superset of rs2.

 prop_union_strict_superset rs1 rs2 =
    (not $ rSetIsEmpty (rs1 -!- rs2))
    ==> (rs2 -<- (rs1 -\/- rs2))
prop_intersection_commutes :: DiscreteOrdered a => RSet a -> RSet a -> BoolSource

Intersection commutes.

 prop_intersection_commutes rs1 rs2 = (rs1 -/\- rs2) == (rs2 -/\- rs1)
prop_union_commutes :: DiscreteOrdered a => RSet a -> RSet a -> BoolSource

Union commutes.

 prop_union_commutes rs1 rs2 = (rs1 -\/- rs2) == (rs2 -\/- rs1)
prop_intersection_associates :: DiscreteOrdered a => RSet a -> RSet a -> RSet a -> BoolSource

Intersection associates.

 prop_intersection_associates rs1 rs2 rs3 =
    ((rs1 -/\- rs2) -/\- rs3) == (rs1 -/\- (rs2 -/\- rs3))
prop_union_associates :: DiscreteOrdered a => RSet a -> RSet a -> RSet a -> BoolSource

Union associates.

 prop_union_associates rs1 rs2 rs3 =
    ((rs1 -\/- rs2) -\/- rs3) == (rs1 -\/- (rs2 -\/- rs3))
prop_de_morgan_intersection :: DiscreteOrdered a => RSet a -> RSet a -> BoolSource

De Morgan's Law for Intersection.

 prop_de_morgan_intersection rs1 rs2 =
    rSetNegation (rs1 -/\- rs2) == (rSetNegation rs1 -\/- rSetNegation rs2)
prop_de_morgan_union :: DiscreteOrdered a => RSet a -> RSet a -> BoolSource

De Morgan's Law for Union.

 prop_de_morgan_union rs1 rs2 =
    rSetNegation (rs1 -\/- rs2) == (rSetNegation rs1 -/\- rSetNegation rs2)
Produced by Haddock version 2.3.0