| Copyright | (c) Justin Le 2018 | 
|---|---|
| License | BSD3 | 
| Maintainer | justin@jle.im | 
| Stability | experimental | 
| Portability | non-portable | 
| Safe Haskell | Safe | 
| Language | Haskell2010 | 
Data.Set.NonEmpty.Internal
Description
Unsafe internal-use functions used in the implementation of
 Data.Set.NonEmpty.  These functions can potentially be used to break
 the abstraction of NESet and produce unsound sets, so be wary!
Synopsis
- data NESet a = NESet {}
- nonEmptySet :: Set a -> Maybe (NESet a)
- withNonEmpty :: r -> (NESet a -> r) -> Set a -> r
- toSet :: NESet a -> Set a
- singleton :: a -> NESet a
- fromList :: Ord a => NonEmpty a -> NESet a
- toList :: NESet a -> NonEmpty a
- size :: NESet a -> Int
- union :: Ord a => NESet a -> NESet a -> NESet a
- unions :: (Foldable1 f, Ord a) => f (NESet a) -> NESet a
- foldr :: (a -> b -> b) -> b -> NESet a -> b
- foldl :: (a -> b -> a) -> a -> NESet b -> a
- foldr' :: (a -> b -> b) -> b -> NESet a -> b
- foldl' :: (a -> b -> a) -> a -> NESet b -> a
- newtype MergeNESet a = MergeNESet {- getMergeNESet :: NESet a
 
- merge :: NESet a -> NESet a -> NESet a
- valid :: Ord a => NESet a -> Bool
- insertMinSet :: a -> Set a -> Set a
- insertMaxSet :: a -> Set a -> Set a
- disjointSet :: Ord a => Set a -> Set a -> Bool
- powerSetSet :: Set a -> Set (Set a)
- disjointUnionSet :: Set a -> Set b -> Set (Either a b)
- cartesianProductSet :: Set a -> Set b -> Set (a, b)
Documentation
A non-empty (by construction) set of values a.  At least one value
 exists in an NESet a
Functions that take an NESet can safely operate on it with the
 assumption that it has at least one item.
Functions that return an NESet provide an assurance that the result
 has at least one item.
Data.Set.NonEmpty re-exports the API of Data.Set, faithfully
 reproducing asymptotics, typeclass constraints, and semantics.
 Functions that ensure that input and output sets are both non-empty
 (like insert) return NESet, but functions that
 might potentially return an empty map (like delete)
 return a Set instead.
You can directly construct an NESet with the API from
 Data.Set.NonEmpty; it's more or less the same as constructing a normal
 Set, except you don't have access to empty.  There are also
 a few ways to construct an NESet from a Set:
- The nonEmptySetsmart constructor will convert aSetaMaybe(NESeta)Nothingif the originalSetwas empty.
- You can use the insertSetfamily of functions to insert a value into aSetto create a guaranteedNESet.
- You can use the IsNonEmptyandIsEmptypatterns to "pattern match" on aSetto reveal it as either containing aNESetor an empty map.
- withNonEmptyoffers a continuation-based interface for deconstructing a- Setand treating it as if it were an- NESet.
You can convert an NESet into a Set with toSet or
 IsNonEmpty, essentially "obscuring" the non-empty
 property from the type.
Constructors
| NESet | |
Instances
| Foldable NESet Source # | Traverses elements in ascending order | 
| Defined in Data.Set.NonEmpty.Internal Methods fold :: Monoid m => NESet m -> m # foldMap :: Monoid m => (a -> m) -> NESet a -> m # foldr :: (a -> b -> b) -> b -> NESet a -> b # foldr' :: (a -> b -> b) -> b -> NESet a -> b # foldl :: (b -> a -> b) -> b -> NESet a -> b # foldl' :: (b -> a -> b) -> b -> NESet a -> b # foldr1 :: (a -> a -> a) -> NESet a -> a # foldl1 :: (a -> a -> a) -> NESet a -> a # elem :: Eq a => a -> NESet a -> Bool # maximum :: Ord a => NESet a -> a # minimum :: Ord a => NESet a -> a # | |
| Eq1 NESet Source # | |
| Ord1 NESet Source # | |
| Defined in Data.Set.NonEmpty.Internal | |
| Show1 NESet Source # | |
| Foldable1 NESet Source # | Traverses elements in ascending order | 
| Eq a => Eq (NESet a) Source # | |
| (Data a, Ord a) => Data (NESet a) Source # | |
| Defined in Data.Set.NonEmpty.Internal Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> NESet a -> c (NESet a) # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (NESet a) # toConstr :: NESet a -> Constr # dataTypeOf :: NESet a -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (NESet a)) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (NESet a)) # gmapT :: (forall b. Data b => b -> b) -> NESet a -> NESet a # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> NESet a -> r # gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> NESet a -> r # gmapQ :: (forall d. Data d => d -> u) -> NESet a -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> NESet a -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> NESet a -> m (NESet a) # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> NESet a -> m (NESet a) # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> NESet a -> m (NESet a) # | |
| Ord a => Ord (NESet a) Source # | |
| Defined in Data.Set.NonEmpty.Internal | |
| (Read a, Ord a) => Read (NESet a) Source # | |
| Show a => Show (NESet a) Source # | |
| Ord a => Semigroup (NESet a) Source # | Left-biased union | 
| NFData a => NFData (NESet a) Source # | |
| Defined in Data.Set.NonEmpty.Internal | |
nonEmptySet :: Set a -> Maybe (NESet a) Source #
O(log n). Smart constructor for an NESet from a Set.  Returns
 Nothing if the Set was originally actually empty, and Just nNESet, if the Set was not empty.
nonEmptySet and maybe empty toSet
See IsNonEmpty for a pattern synonym that lets you
 "match on" the possiblity of a Set being an NESet.
nonEmptySet (Data.Set.fromList [3,5]) == Just (fromList (3:|[5]))
Arguments
| :: r | value to return if set is empty | 
| -> (NESet a -> r) | function to apply if set is not empty | 
| -> Set a | |
| -> r | 
O(log n). A general continuation-based way to consume a Set as if
 it were an NESet. withNonEmpty def fSet.  If set is
 empty, it will evaluate to def.  Otherwise, a non-empty set NESet
 will be fed to the function f instead.
nonEmptySet==withNonEmptyNothingJust
toSet :: NESet a -> Set a Source #
O(log n).
 Convert a non-empty set back into a normal possibly-empty map, for usage
 with functions that expect Set.
Can be thought of as "obscuring" the non-emptiness of the set in its
 type.  See the IsNotEmpty pattern.
nonEmptySet and maybe empty toSet
toSet (fromList ((3,"a") :| [(5,"b")])) == Data.Set.fromList [(3,"a"), (5,"b")]
fromList :: Ord a => NonEmpty a -> NESet a Source #
O(n*log n). Create a set from a list of elements.
size :: NESet a -> Int Source #
O(1). The number of elements in the set. Guaranteed to be greater than zero.
union :: Ord a => NESet a -> NESet a -> NESet a Source #
O(m*log(n/m + 1)), m <= n. The union of two sets, preferring the first set when equal elements are encountered.
unions :: (Foldable1 f, Ord a) => f (NESet a) -> NESet a Source #
The union of a non-empty list of sets
foldr' :: (a -> b -> b) -> b -> NESet a -> b Source #
O(n). A strict version of foldr. Each application of the operator is
 evaluated before using the result in the next application. This
 function is strict in the starting value.
foldl' :: (a -> b -> a) -> a -> NESet b -> a Source #
O(n). A strict version of foldl. Each application of the operator is
 evaluated before using the result in the next application. This
 function is strict in the starting value.
newtype MergeNESet a Source #
Used for cartesianProduct
Constructors
| MergeNESet | |
| Fields 
 | |
Instances
| Semigroup (MergeNESet a) Source # | |
| Defined in Data.Set.NonEmpty.Internal Methods (<>) :: MergeNESet a -> MergeNESet a -> MergeNESet a # sconcat :: NonEmpty (MergeNESet a) -> MergeNESet a # stimes :: Integral b => b -> MergeNESet a -> MergeNESet a # | |
merge :: NESet a -> NESet a -> NESet a Source #
Unsafely merge two disjoint sets. Only legal if all items in the first set are less than all items in the second set
insertMinSet :: a -> Set a -> Set a Source #
O(log n). Insert new value into a set where values are
 strictly greater than the new values  That is, the new value must be
 strictly less than all values present in the Set.  /The precondition
 is not checked./
While this has the same asymptotics as Data.Set.insert, it saves
 a constant factor for value comparison (so may be helpful if comparison
 is expensive) and also does not require an Ord instance for the value
 type.
insertMaxSet :: a -> Set a -> Set a Source #
O(log n). Insert new value into a set where values are /strictly
 less than the new value.  That is, the new value must be strictly
 greater than all values present in the Set.  The precondition is not
 checked./
While this has the same asymptotics as Data.Set.insert, it saves
 a constant factor for value comparison (so may be helpful if comparison
 is expensive) and also does not require an Ord instance for the value
 type.
disjointSet :: Ord a => Set a -> Set a -> Bool Source #
CPP for new functions not in old containers ---------------------------------------------
Comptability layer for disjoint.
disjointUnionSet :: Set a -> Set b -> Set (Either a b) Source #
Comptability layer for disjointUnion.
cartesianProductSet :: Set a -> Set b -> Set (a, b) Source #
Comptability layer for cartesianProduct.