Safe Haskell | Safe-Infered |
---|
A module of simple utility functions which are used throughout the rest of the library
- toSet :: Ord a => [a] -> [a]
- sortDesc :: Ord a => [a] -> [a]
- insertDesc :: Ord a => a -> [a] -> [a]
- setUnionAsc :: Ord a => [a] -> [a] -> [a]
- multisetSumAsc :: Ord a => [a] -> [a] -> [a]
- multisetSumDesc :: Ord a => [a] -> [a] -> [a]
- diffAsc :: Ord a => [a] -> [a] -> [a]
- diffDesc :: Ord a => [a] -> [a] -> [a]
- isSubsetAsc :: Ord a => [a] -> [a] -> Bool
- isSubMultisetAsc :: Ord a => [a] -> [a] -> Bool
- pairs :: [a] -> [(a, a)]
- ordpair :: Ord t => t -> t -> (t, t)
- foldcmpl :: (b -> b -> Bool) -> [b] -> Bool
- isWeaklyIncreasing :: Ord t => [t] -> Bool
- isStrictlyIncreasing :: Ord t => [t] -> Bool
- isWeaklyDecreasing :: Ord t => [t] -> Bool
- isStrictlyDecreasing :: Ord t => [t] -> Bool
- cmpfst :: Ord a => (a, b) -> (a, b1) -> Ordering
- eqfst :: Eq a => (a, b) -> (a, b1) -> Bool
- fromBase :: Num a => a -> [a] -> a
- powersetdfs :: [a] -> [[a]]
- powersetbfs :: [a] -> [[a]]
- combinationsOf :: Int -> [a] -> [[a]]
- choose :: Integral a => a -> a -> a
- class FinSet x where
- elts :: [x]
- class HasInverses a where
- inverse :: a -> a
- (^-) :: (Num a, HasInverses a, Integral b) => a -> b -> a
Documentation
insertDesc :: Ord a => a -> [a] -> [a]Source
setUnionAsc :: Ord a => [a] -> [a] -> [a]Source
The set union of two ascending lists. If both inputs are strictly increasing, then the output is their union and is strictly increasing. The code does not check that the lists are strictly increasing.
multisetSumAsc :: Ord a => [a] -> [a] -> [a]Source
The multiset sum of two ascending lists. If xs and ys are ascending, then multisetSumAsc xs ys == sort (xs++ys). The code does not check that the lists are ascending.
multisetSumDesc :: Ord a => [a] -> [a] -> [a]Source
The multiset sum of two descending lists. If xs and ys are descending, then multisetSumDesc xs ys == sort (xs++ys). The code does not check that the lists are descending.
diffAsc :: Ord a => [a] -> [a] -> [a]Source
The multiset or set difference between two ascending lists. If xs and ys are ascending, then diffAsc xs ys == xs \ ys, and diffAsc is more efficient. If xs and ys are sets (that is, have no repetitions), then diffAsc xs ys is the set difference. The code does not check that the lists are ascending.
diffDesc :: Ord a => [a] -> [a] -> [a]Source
The multiset or set difference between two descending lists. If xs and ys are descending, then diffDesc xs ys == xs \ ys, and diffDesc is more efficient. If xs and ys are sets (that is, have no repetitions), then diffDesc xs ys is the set difference. The code does not check that the lists are descending.
isSubsetAsc :: Ord a => [a] -> [a] -> BoolSource
isSubMultisetAsc :: Ord a => [a] -> [a] -> BoolSource
isWeaklyIncreasing :: Ord t => [t] -> BoolSource
isStrictlyIncreasing :: Ord t => [t] -> BoolSource
isWeaklyDecreasing :: Ord t => [t] -> BoolSource
isStrictlyDecreasing :: Ord t => [t] -> BoolSource
powersetdfs :: [a] -> [[a]]Source
Given a set xs
, represented as an ordered list, powersetdfs xs
returns the list of all subsets of xs, in lex order
powersetbfs :: [a] -> [[a]]Source
Given a set xs
, represented as an ordered list, powersetbfs xs
returns the list of all subsets of xs, in shortlex order
combinationsOf :: Int -> [a] -> [[a]]Source
Given a positive integer k
, and a set xs
, represented as a list,
combinationsOf k xs
returns all k-element subsets of xs.
The result will be in lex order, relative to the order of the xs.
choose :: Integral a => a -> a -> aSource
choose n k
is the number of ways of choosing k distinct elements from an n-set
The class of finite sets
class HasInverses a whereSource
A class representing algebraic structures having an inverse operation. Note that in some cases not every element has an inverse.
HasInverses SSymF | |
(Ord a, Show a) => HasInverses (Permutation a) | The HasInverses instance is what enables us to write |
HasInverses (GroupAlgebra Q) | Note that the inverse of a group algebra element can only be efficiently calculated if the group generated by the non-zero terms is very small (eg <100 elements). |
(Eq k, Fractional k, Ord a, Show a) => HasInverses (Vect k (Interval a)) |
(^-) :: (Num a, HasInverses a, Integral b) => a -> b -> aSource
A trick: x^-1 returns the inverse of x