Code for manipulation of equivalence classes on index types. An
Equivalence
is an equivalence relation. The empty equivalence relation
is constructed over a ranges of values using emptyEquivalence
. Less
discerning equivalence relations can be obtained with equate
and
equateAll
. The relation can be tested with equiv
and equivalent
.
An example follows:
import Data.Equivalence.Persistent rel = equateAll [1,3,5,7,9] . equate 5 6 . equate 2 4 $ emptyEquivalence (1,10) test1 = equiv rel 3 5 -- This is True test2 = equiv rel 1 6 -- This is True test3 = equiv rel 4 6 -- This is False
- data Equivalence i
- emptyEquivalence :: Ix i => (i, i) -> Equivalence i
- domain :: Ix i => Equivalence i -> (i, i)
- equiv :: Ix i => Equivalence i -> i -> i -> Bool
- equivalent :: Ix i => Equivalence i -> [i] -> Bool
- equate :: Ix i => i -> i -> Equivalence i -> Equivalence i
- equateAll :: Ix i => [i] -> Equivalence i -> Equivalence i
Documentation
data Equivalence i Source
An Equivalence
is an equivalence relation on a range of values of some
index type.
emptyEquivalence :: Ix i => (i, i) -> Equivalence iSource
emptyEquivalence
is an equivalence relation that equates two values
only when they are equal to each other. It is the most discerning such
relation possible.
domain :: Ix i => Equivalence i -> (i, i)Source
Gets the domain of an equivalence relation, as the ordered pair of index bounds.
equiv :: Ix i => Equivalence i -> i -> i -> BoolSource
Determines if two values are equivalent under the given equivalence relation.
equivalent :: Ix i => Equivalence i -> [i] -> BoolSource
Determines if all of the given values are equivalent under the given equivalence relation.
equate :: Ix i => i -> i -> Equivalence i -> Equivalence iSource
Construct the equivalence relation obtained by equating the given two values. This combines equivalence classes.
equateAll :: Ix i => [i] -> Equivalence i -> Equivalence iSource
Construct the equivalence relation obtained by equating all of the given values. This combines equivalence classes.