-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Classes and data structures complementing the singletons library -- -- Please see README.md @package pringletons @version 0.3 module Data.Case.Enumerate -- | This will create a pattern match on the first argument that splices in -- the third argument for each pattern. Example: -- --
-- data Color = Red | Blue | Green deriving Show -- myFunc :: Color -> String -- myFunc c = $(enumerateConstructors 'c ''Color =<< [|show c|]) ---- -- I should fix this function to actually make it work that way. It -- actually uses the singletonized data type instead. enumerateConstructors :: Name -> Name -> Exp -> Q Exp module Data.Singletons.Class class EqSing1 f eqSing1 :: EqSing1 f => Sing a -> f a -> f a -> Bool class EqSing2 f eqSing2 :: EqSing2 f => Sing a -> Sing b -> f a b -> f a b -> Bool class EqSing1 f => OrdSing1 f compareSing1 :: OrdSing1 f => Sing a -> f a -> f a -> Ordering class EqSing2 f => OrdSing2 f compareSing2 :: OrdSing2 f => Sing a -> Sing b -> f a b -> f a b -> Ordering class HashableSing1 f hashWithSaltSing1 :: HashableSing1 f => Sing a -> Int -> f a -> Int class HashableSing2 f hashWithSaltSing2 :: HashableSing2 f => Sing a -> Sing b -> Int -> f a b -> Int class ToJSONSing1 f toJSONSing1 :: ToJSONSing1 f => Sing a -> f a -> Value class ToJSONSing2 f toJSONSing2 :: ToJSONSing2 f => Sing a -> Sing b -> f a b -> Value class FromJSONSing1 f parseJSONSing1 :: FromJSONSing1 f => Sing a -> Value -> Parser (f a) class FromJSONSing2 f parseJSONSing2 :: FromJSONSing2 f => Sing a -> Sing b -> Value -> Parser (f a b) class (kproxy ~ KProxy) => ShowKind (kproxy :: KProxy a) where showsPrecKind i s xs = showsPrec i (fromSing s) xs showsPrecKind :: ShowKind kproxy => Int -> Sing (x :: a) -> ShowS class (kproxy ~ KProxy) => ReadKind (kproxy :: KProxy a) where readsPrecKind i s = map (first toSing) (readsPrec i s) readsPrecKind :: ReadKind kproxy => Int -> ReadS (SomeSing kproxy) class (kproxy ~ KProxy) => HashableKind (kproxy :: KProxy a) where hashWithSaltKind i s = hashWithSalt i (fromSing s) hashWithSaltKind :: HashableKind kproxy => Int -> Sing (x :: a) -> Int class (kproxy ~ KProxy) => ToJSONKind (kproxy :: KProxy a) where toJSONKind s = String (pack (showKind s)) toJSONKind :: ToJSONKind kproxy => Sing (x :: a) -> Value class (kproxy ~ KProxy) => FromJSONKind (kproxy :: KProxy a) parseJSONKind :: FromJSONKind kproxy => Value -> Parser (SomeSing kproxy) class (kproxy ~ KProxy) => ToJSONKeyKind (kproxy :: KProxy a) where toJSONKeyKind s = pack (showKind s) toJSONKeyKind :: ToJSONKeyKind kproxy => Sing (x :: a) -> Text class (kproxy ~ KProxy) => FromJSONKeyKind (kproxy :: KProxy a) where parseJSONKeyKind t = let s = unpack t in case readMaybeKind s of { Nothing -> fail ("Could not parse key " ++ s) Just a -> return a } parseJSONKeyKind :: FromJSONKeyKind kproxy => Text -> Parser (SomeSing kproxy) newtype Applied1 (f :: TyFun k * -> *) (a :: k) Applied1 :: Apply f a -> Applied1 [getApplied1] :: Applied1 -> Apply f a newtype Applied2 (f :: TyFun k (TyFun j * -> *) -> *) (a :: k) (b :: j) Applied2 :: Apply (Apply f a) b -> Applied2 [getApplied2] :: Applied2 -> Apply (Apply f a) b newtype Applied3 (f :: TyFun k (TyFun j (TyFun l * -> *) -> *) -> *) (a :: k) (b :: j) (c :: l) Applied3 :: Apply (Apply (Apply f a) b) c -> Applied3 [getApplied3] :: Applied3 -> Apply (Apply (Apply f a) b) c data SomeSingWith1 (kproxy :: KProxy k) (f :: k -> *) SomeSingWith1 :: Sing a -> f a -> SomeSingWith1 KProxy f type SomeSingWith1' = SomeSingWith1 KProxy data SomeSingWith2 (kproxy1 :: KProxy k) (kproxy2 :: KProxy j) (f :: k -> j -> *) SomeSingWith2 :: Sing a -> Sing b -> f a b -> SomeSingWith2 KProxy KProxy f type SomeSingWith2' = SomeSingWith2 KProxy KProxy data SingWith1 (kproxy :: KProxy k) (f :: k -> *) (a :: k) SingWith1 :: Sing a -> f a -> SingWith1 KProxy f a -- | This is a wrapper for SomeSing that provides common typeclass -- instances for it. This can be helpful when you want to use -- Data.Set with SomeSing. newtype ClassySomeSing kproxy ClassySomeSing :: SomeSing kproxy -> ClassySomeSing kproxy [getClassySomeSing] :: ClassySomeSing kproxy -> SomeSing kproxy class EqApplied1 (f :: TyFun k * -> *) eqApplied1 :: EqApplied1 f => proxy f -> Sing a -> Apply f a -> Apply f a -> Bool class HashableApplied1 (f :: TyFun k * -> *) hashWithSaltApplied1 :: HashableApplied1 f => proxy f -> Sing a -> Int -> Apply f a -> Int class ToJSONApplied1 (f :: TyFun k * -> *) toJSONApplied1 :: ToJSONApplied1 f => proxy f -> Sing a -> Apply f a -> Value class FromJSONApplied1 (f :: TyFun k * -> *) parseJSONApplied1 :: FromJSONApplied1 f => proxy f -> Sing a -> Value -> Parser (Apply f a) showKind :: ShowKind kproxy => Sing a -> String readMaybeKind :: ReadKind kproxy => String -> Maybe (SomeSing kproxy) -- | Helper function to demote an equality check. It would be nice if this -- could be added as an Eq instance for SomeSing, but it -- would required collapsing a lot of the modules in singletons -- to prevent cyclic imports. Or it could be provided as an orphan -- instance. eqSome :: SEq kproxy => SomeSing kproxy -> SomeSing kproxy -> Bool -- | Helper function to demote a comparison compareSome :: SOrd kproxy => SomeSing kproxy -> SomeSing kproxy -> Ordering instance forall (k :: BOX) (f :: Data.Singletons.TyFun k * -> *). Data.Singletons.Class.EqApplied1 f => Data.Singletons.Class.EqSing1 (Data.Singletons.Class.Applied1 f) instance forall (k :: BOX) (f :: Data.Singletons.TyFun k * -> *). Data.Singletons.Class.ToJSONApplied1 f => Data.Singletons.Class.ToJSONSing1 (Data.Singletons.Class.Applied1 f) instance forall (k :: BOX) (f :: Data.Singletons.TyFun k * -> *). Data.Singletons.Class.FromJSONApplied1 f => Data.Singletons.Class.FromJSONSing1 (Data.Singletons.Class.Applied1 f) instance forall (k :: BOX) (f :: Data.Singletons.TyFun k * -> *). Data.Singletons.Class.HashableApplied1 f => Data.Singletons.Class.HashableSing1 (Data.Singletons.Class.Applied1 f) instance forall (k :: BOX) (kproxy :: Data.Proxy.KProxy k) (f :: k -> *). (Data.Singletons.Class.EqSing1 f, Data.Singletons.Decide.SDecide kproxy) => GHC.Classes.Eq (Data.Singletons.Class.SomeSingWith1 kproxy f) instance forall (k :: BOX) (k1 :: BOX) (kproxy1 :: Data.Proxy.KProxy k) (kproxy2 :: Data.Proxy.KProxy k1) (f :: k -> k1 -> *). (Data.Singletons.Class.ToJSONKind kproxy1, Data.Singletons.Class.ToJSONKind kproxy2, Data.Singletons.Class.ToJSONSing2 f) => Data.Aeson.Types.Class.ToJSON (Data.Singletons.Class.SomeSingWith2 kproxy1 kproxy2 f) instance forall (k :: BOX) (k1 :: BOX) (kproxy1 :: Data.Proxy.KProxy k) (kproxy2 :: Data.Proxy.KProxy k1) (f :: k -> k1 -> *). (Data.Singletons.Class.FromJSONKind kproxy1, Data.Singletons.Class.FromJSONKind kproxy2, Data.Singletons.Class.FromJSONSing2 f) => Data.Aeson.Types.Class.FromJSON (Data.Singletons.Class.SomeSingWith2 kproxy1 kproxy2 f) instance forall (k :: BOX) (kproxy1 :: Data.Proxy.KProxy k) (f :: k -> *). (Data.Singletons.Class.HashableKind kproxy1, Data.Singletons.Class.HashableSing1 f) => Data.Hashable.Class.Hashable (Data.Singletons.Class.SomeSingWith1 kproxy1 f) instance forall (k :: BOX) (kproxy :: Data.Proxy.KProxy k). Data.Singletons.Prelude.Eq.SEq kproxy => GHC.Classes.Eq (Data.Singletons.Class.ClassySomeSing kproxy) instance forall (k :: BOX) (kproxy :: Data.Proxy.KProxy k). Data.Singletons.Prelude.Ord.SOrd kproxy => GHC.Classes.Ord (Data.Singletons.Class.ClassySomeSing kproxy) -- | This is a dependent version of the Data.Map module from -- containers. -- -- This module was largely copied from the dependent-map -- package. module Data.Singletons.Map data SingMap (kproxy :: KProxy j) (f :: j -> *) Tip :: SingMap kproxy f Bin :: !Int -> !(Sing v) -> !(f v) -> !(SingMap kproxy f) -> !(SingMap kproxy f) -> SingMap kproxy f type SingMap' = SingMap KProxy -- | O(1). The empty map. -- --
-- empty == fromList [] -- size empty == 0 --empty :: SingMap kproxy f -- | O(1). A map with a single element. -- --
-- singleton 1 'a' == fromList [(1, 'a')] -- size (singleton 1 'a') == 1 --singleton :: Sing v -> f v -> SingMap kproxy f -- | O(1). Is the map empty? null :: SingMap kproxy f -> Bool -- | O(1). The number of elements in the map. size :: SingMap kproxy f -> Int -- | O(log n). Lookup the value at a key in the map. -- -- The function will return the corresponding value as (Just -- value), or Nothing if the key isn't in the map. lookup :: (SOrd kproxy, SDecide kproxy) => Sing v -> SingMap kproxy f -> Maybe (f v) lookupAssoc :: (SOrd kproxy, SDecide kproxy) => SomeSing kproxy -> SingMap kproxy f -> Maybe (SomeSingWith1 kproxy f) combine :: (SOrd kproxy, SDecide kproxy) => Sing v -> f v -> SingMap kproxy f -> SingMap kproxy f -> SingMap kproxy f insertMax :: Sing v -> f v -> SingMap kproxy f -> SingMap kproxy f insertMin :: Sing v -> f v -> SingMap kproxy f -> SingMap kproxy f merge :: SOrd kproxy => SingMap kproxy f -> SingMap kproxy f -> SingMap kproxy f glue :: (kproxy ~ KProxy) => SingMap kproxy f -> SingMap kproxy f -> SingMap kproxy f -- | O(log n). Delete and find the minimal element. -- --
-- deleteFindMin (fromList [(5,"a"), (3,"b"), (10,"c")]) == ((3,"b"), fromList[(5,"a"), (10,"c")]) -- deleteFindMin Error: can not return the minimal element of an empty map --deleteFindMin :: (kproxy ~ KProxy) => SingMap kproxy f -> (SomeSingWith1 kproxy f, SingMap kproxy f) -- | O(log n). Delete and find the maximal element. -- --
-- deleteFindMax (fromList [(5,"a"), (3,"b"), (10,"c")]) == ((10,"c"), fromList [(3,"b"), (5,"a")]) -- deleteFindMax empty Error: can not return the maximal element of an empty map --deleteFindMax :: (kproxy ~ KProxy) => SingMap kproxy f -> (SomeSingWith1 kproxy f, SingMap kproxy f) delta :: Int ratio :: Int balance :: Sing v -> f v -> SingMap kproxy f -> SingMap kproxy f -> SingMap kproxy f rotateL :: Sing v -> f v -> SingMap kproxy f -> SingMap kproxy f -> SingMap kproxy f rotateR :: Sing v -> f v -> SingMap kproxy f -> SingMap kproxy f -> SingMap kproxy f singleL :: Sing v -> f v -> SingMap kproxy f -> SingMap kproxy f -> SingMap kproxy f singleR :: Sing v -> f v -> SingMap kproxy f -> SingMap kproxy f -> SingMap kproxy f doubleL :: Sing v -> f v -> SingMap kproxy f -> SingMap kproxy f -> SingMap kproxy f doubleR :: Sing v -> f v -> SingMap kproxy f -> SingMap kproxy f -> SingMap kproxy f bin :: Sing v -> f v -> SingMap kproxy f -> SingMap kproxy f -> SingMap kproxy f trim :: SOrd kproxy => (SomeSing kproxy -> Ordering) -> (SomeSing kproxy -> Ordering) -> SingMap kproxy f -> SingMap kproxy f trimLookupLo :: (SOrd kproxy, SDecide kproxy) => SomeSing kproxy -> (SomeSing kproxy -> Ordering) -> SingMap kproxy f -> (Maybe (SomeSingWith1 kproxy f), SingMap kproxy f) filterGt :: (SOrd kproxy, SDecide kproxy) => (SomeSing kproxy -> Ordering) -> SingMap kproxy f -> SingMap kproxy f filterLt :: (SOrd kproxy, SDecide kproxy) => (SomeSing kproxy -> Ordering) -> SingMap kproxy f -> SingMap kproxy f -- | O(log n). Find the value at a key. Calls error when the -- element can not be found. -- --
-- fromList [(5,'a'), (3,'b')] ! 1 Error: element not in the map -- fromList [(5,'a'), (3,'b')] ! 5 == 'a' --(!) :: (SOrd kproxy, SDecide kproxy) => SingMap kproxy f -> Sing v -> f v -- | Same as difference. (\\) :: (SOrd kproxy, SDecide kproxy) => SingMap kproxy f -> SingMap kproxy f -> SingMap kproxy f -- | O(log n). Is the key a member of the map? See also -- notMember. member :: (SOrd kproxy, SDecide kproxy) => Sing v -> SingMap kproxy f -> Bool -- | O(log n). Is the key not a member of the map? See also -- member. notMember :: (SOrd kproxy, SDecide kproxy) => Sing v -> SingMap kproxy f -> Bool -- | O(log n). Find the value at a key. Calls error when the -- element can not be found. Consider using lookup when elements -- may not be present. find :: (SOrd kproxy, SDecide kproxy) => Sing v -> SingMap kproxy f -> f v -- | O(log n). The expression (findWithDefault def k -- map) returns the value at key k or returns default value -- def when the key is not in the map. findWithDefault :: (SOrd kproxy, SDecide kproxy) => f v -> Sing v -> SingMap kproxy f -> f v -- | O(log n). Insert a new key and value in the map. If the key is -- already present in the map, the associated value is replaced with the -- supplied value. insert is equivalent to insertWith -- const. insert :: (SOrd kproxy, SDecide kproxy) => Sing v -> f v -> SingMap kproxy f -> SingMap kproxy f -- | O(log n). Insert with a function, combining new value and old -- value. insertWith f key value mp will insert the entry -- key :=> value into mp if key does not exist in -- the map. If the key does exist, the function will insert the entry -- key :=> f new_value old_value. insertWith :: (SOrd kproxy, SDecide kproxy) => (f v -> f v -> f v) -> Sing v -> f v -> SingMap kproxy f -> SingMap kproxy f -- | Same as insertWith, but the combining function is applied -- strictly. This is often the most desirable behavior. insertWith' :: (SOrd kproxy, SDecide kproxy) => (f v -> f v -> f v) -> Sing v -> f v -> SingMap kproxy f -> SingMap kproxy f -- | O(log n). Insert with a function, combining key, new value and -- old value. insertWithKey f key value mp will insert -- the entry key :=> value into mp if key does not -- exist in the map. If the key does exist, the function will insert the -- entry key :=> f key new_value old_value. Note that the key -- passed to f is the same key passed to insertWithKey. insertWithKey :: (SOrd kproxy, SDecide kproxy) => (Sing v -> f v -> f v -> f v) -> Sing v -> f v -> SingMap kproxy f -> SingMap kproxy f -- | Same as insertWithKey, but the combining function is applied -- strictly. insertWithKey' :: (SOrd kproxy, SDecide kproxy) => (Sing v -> f v -> f v -> f v) -> Sing v -> f v -> SingMap kproxy f -> SingMap kproxy f -- | O(log n). Combines insert operation with old value retrieval. -- The expression (insertLookupWithKey f k x map) is a -- pair where the first element is equal to (lookup k -- map) and the second element equal to (insertWithKey f -- k x map). insertLookupWithKey :: (SOrd kproxy, SDecide kproxy) => (Sing v -> f v -> f v -> f v) -> Sing v -> f v -> SingMap kproxy f -> (Maybe (f v), SingMap kproxy f) -- | O(log n). A strict version of insertLookupWithKey. insertLookupWithKey' :: (SOrd kproxy, SDecide kproxy) => (Sing v -> f v -> f v -> f v) -> Sing v -> f v -> SingMap kproxy f -> (Maybe (f v), SingMap kproxy f) -- | O(log n). Delete a key and its value from the map. When the key -- is not a member of the map, the original map is returned. delete :: (SOrd kproxy, SDecide kproxy) => Sing v -> SingMap kproxy f -> SingMap kproxy f -- | O(log n). Update a value at a specific key with the result of -- the provided function. When the key is not a member of the map, the -- original map is returned. adjust :: (SOrd kproxy, SDecide kproxy) => (f v -> f v) -> Sing v -> SingMap kproxy f -> SingMap kproxy f -- | O(log n). Adjust a value at a specific key. When the key is not -- a member of the map, the original map is returned. adjustWithKey :: (SOrd kproxy, SDecide kproxy) => (Sing v -> f v -> f v) -> Sing v -> SingMap kproxy f -> SingMap kproxy f -- | O(log n). The expression (update f k map) -- updates the value x at k (if it is in the map). If -- (f x) is Nothing, the element is deleted. If it is -- (Just y), the key k is bound to the new value -- y. update :: (SOrd kproxy, SDecide kproxy) => (f v -> Maybe (f v)) -> Sing v -> SingMap kproxy f -> SingMap kproxy f -- | O(log n). The expression (updateWithKey f k -- map) updates the value x at k (if it is in the -- map). If (f k x) is Nothing, the element is deleted. -- If it is (Just y), the key k is bound to the -- new value y. updateWithKey :: (SOrd kproxy, SDecide kproxy) => (Sing v -> f v -> Maybe (f v)) -> Sing v -> SingMap kproxy f -> SingMap kproxy f -- | O(log n). Lookup and update. See also updateWithKey. The -- function returns changed value, if it is updated. Returns the original -- key value if the map entry is deleted. updateLookupWithKey :: (SOrd kproxy, SDecide kproxy) => (Sing v -> f v -> Maybe (f v)) -> Sing v -> SingMap kproxy f -> (Maybe (f v), SingMap kproxy f) -- | O(log n). The expression (alter f k map) alters -- the value x at k, or absence thereof. alter -- can be used to insert, delete, or update a value in a Map. In -- short : lookup k (alter f k m) = f (lookup k -- m). alter :: (SOrd kproxy, SDecide kproxy) => (Maybe (f v) -> Maybe (f v)) -> Sing v -> SingMap kproxy f -> SingMap kproxy f -- | O(log n). Return the index of a key. The index is a -- number from 0 up to, but not including, the size of the -- map. Calls error when the key is not a member of the -- map. findIndex :: (SOrd kproxy, SDecide kproxy) => Sing v -> SingMap kproxy f -> Int -- | O(log n). Lookup the index of a key. The index is a -- number from 0 up to, but not including, the size of the -- map. lookupIndex :: (SOrd kproxy, SDecide kproxy) => Sing v -> SingMap kproxy f -> Maybe Int -- | O(log n). Retrieve an element by index. Calls -- error when an invalid index is used. elemAt :: (kproxy ~ KProxy) => Int -> SingMap kproxy f -> SomeSingWith1 kproxy f -- | O(log n). Update the element at index. Calls -- error when an invalid index is used. updateAt :: (kproxy ~ KProxy) => (forall v. Sing v -> f v -> Maybe (f v)) -> Int -> SingMap kproxy f -> SingMap kproxy f -- | O(log n). Delete the element at index. Defined as -- (deleteAt i map = updateAt (k x -> -- Nothing) i map). deleteAt :: (kproxy ~ KProxy) => Int -> SingMap kproxy f -> SingMap kproxy f -- | O(log n). The minimal key of the map. Calls error is the -- map is empty. findMin :: (kproxy ~ KProxy) => SingMap kproxy f -> SomeSingWith1 kproxy f -- | O(log n). The maximal key of the map. Calls error is the -- map is empty. findMax :: (kproxy ~ KProxy) => SingMap kproxy f -> SomeSingWith1 kproxy f -- | O(log n). Delete the minimal key. Returns an empty map if the -- map is empty. deleteMin :: (kproxy ~ KProxy) => SingMap kproxy f -> SingMap kproxy f -- | O(log n). Delete the maximal key. Returns an empty map if the -- map is empty. deleteMax :: (kproxy ~ KProxy) => SingMap kproxy f -> SingMap kproxy f -- | O(log n). Update the value at the minimal key. updateMinWithKey :: (forall v. Sing v -> f v -> Maybe (f v)) -> SingMap kproxy f -> SingMap kproxy f -- | O(log n). Update the value at the maximal key. updateMaxWithKey :: (forall v. Sing v -> f v -> Maybe (f v)) -> SingMap kproxy f -> SingMap kproxy f -- | O(log n). Retrieves the minimal (key :=> value) entry of the -- map, and the map stripped of that element, or Nothing if passed -- an empty map. minViewWithKey :: (kproxy ~ KProxy) => SingMap kproxy f -> Maybe (SomeSingWith1 kproxy f, SingMap kproxy f) -- | O(log n). Retrieves the maximal (key :=> value) entry of the -- map, and the map stripped of that element, or Nothing if passed -- an empty map. maxViewWithKey :: (kproxy ~ KProxy) => SingMap kproxy f -> Maybe (SomeSingWith1 kproxy f, SingMap kproxy f) -- | The union of a list of maps: (unions == foldl -- union empty). unions :: (SOrd kproxy, SDecide kproxy) => [SingMap kproxy f] -> SingMap kproxy f -- | The union of a list of maps, with a combining operation: -- (unionsWithKey f == foldl (unionWithKey f) -- empty). unionsWithKey :: (SOrd kproxy, SDecide kproxy) => (forall v. Sing v -> f v -> f v -> f v) -> [SingMap kproxy f] -> SingMap kproxy f -- | O(n+m). The expression (union t1 t2) takes the -- left-biased union of t1 and t2. It prefers -- t1 when duplicate keys are encountered, i.e. -- (union == unionWith const). The -- implementation uses the efficient hedge-union algorithm. -- Hedge-union is more efficient on (bigset `union` smallset). union :: (SOrd kproxy, SDecide kproxy) => SingMap kproxy f -> SingMap kproxy f -> SingMap kproxy f hedgeUnionL :: (SOrd kproxy, SDecide kproxy) => (SomeSing kproxy -> Ordering) -> (SomeSing kproxy -> Ordering) -> SingMap kproxy f -> SingMap kproxy f -> SingMap kproxy f -- | O(n+m). Union with a combining function. The implementation -- uses the efficient hedge-union algorithm. Hedge-union is more -- efficient on (bigset `union` smallset). unionWithKey :: (SOrd kproxy, SDecide kproxy) => (forall v. Sing v -> f v -> f v -> f v) -> SingMap kproxy f -> SingMap kproxy f -> SingMap kproxy f hedgeUnionWithKey :: (SOrd kproxy, SDecide kproxy) => (forall v. Sing v -> f v -> f v -> f v) -> (SomeSing kproxy -> Ordering) -> (SomeSing kproxy -> Ordering) -> SingMap kproxy f -> SingMap kproxy f -> SingMap kproxy f -- | O(n+m). Difference of two maps. Return elements of the first -- map not existing in the second map. The implementation uses an -- efficient hedge algorithm comparable with hedge-union. difference :: (SOrd kproxy, SDecide kproxy) => SingMap kproxy f -> SingMap kproxy g -> SingMap kproxy f hedgeDiff :: (SOrd kproxy, SDecide kproxy) => (SomeSing kproxy -> Ordering) -> (SomeSing kproxy -> Ordering) -> SingMap kproxy f -> SingMap kproxy g -> SingMap kproxy f -- | O(n+m). Difference with a combining function. When two equal -- keys are encountered, the combining function is applied to the key and -- both values. If it returns Nothing, the element is discarded -- (proper set difference). If it returns (Just y), the -- element is updated with a new value y. The implementation -- uses an efficient hedge algorithm comparable with -- hedge-union. differenceWithKey :: (SOrd kproxy, SDecide kproxy) => (forall v. Sing v -> f v -> g v -> Maybe (f v)) -> SingMap kproxy f -> SingMap kproxy g -> SingMap kproxy f hedgeDiffWithKey :: (SOrd kproxy, SDecide kproxy) => (forall v. Sing v -> f v -> g v -> Maybe (f v)) -> (SomeSing kproxy -> Ordering) -> (SomeSing kproxy -> Ordering) -> SingMap kproxy f -> SingMap kproxy g -> SingMap kproxy f -- | O(n+m). Intersection of two maps. Return data in the first map -- for the keys existing in both maps. (intersection m1 m2 == -- intersectionWith const m1 m2). intersection :: (SOrd kproxy, SDecide kproxy) => SingMap kproxy f -> SingMap kproxy f -> SingMap kproxy f -- | O(n+m). Intersection with a combining function. Intersection is -- more efficient on (bigset `intersection` smallset). intersectionWithKey :: (SOrd kproxy, SDecide kproxy) => (forall v. Sing v -> f v -> g v -> h v) -> SingMap kproxy f -> SingMap kproxy g -> SingMap kproxy h -- | O(n). Filter all keys/values that satisfy the predicate. filterWithKey :: (SOrd kproxy, SDecide kproxy) => (forall v. Sing v -> f v -> Bool) -> SingMap kproxy f -> SingMap kproxy f -- | O(n). Partition the map according to a predicate. The first map -- contains all elements that satisfy the predicate, the second all -- elements that fail the predicate. See also split. partitionWithKey :: (SOrd kproxy, SDecide kproxy) => (forall v. Sing v -> f v -> Bool) -> SingMap kproxy f -> (SingMap kproxy f, SingMap kproxy f) -- | O(n). Map keys/values and collect the Just results. mapMaybeWithKey :: (SOrd kproxy, SDecide kproxy) => (forall v. Sing v -> f v -> Maybe (g v)) -> SingMap kproxy f -> SingMap kproxy g -- | O(n). Map keys/values and separate the Left and -- Right results. mapEitherWithKey :: (SOrd kproxy, SDecide kproxy) => (forall v. Sing v -> f v -> Either (g v) (h v)) -> SingMap kproxy f -> (SingMap kproxy g, SingMap kproxy h) -- | O(n). Map a function over all values in the map. mapWithKey :: (forall v. Sing v -> f v -> g v) -> SingMap kproxy f -> SingMap kproxy g -- | O(n). The function mapAccumLWithKey threads an -- accumulating argument throught the map in ascending order of keys. mapAccumLWithKey :: (forall v. a -> Sing v -> f v -> (a, g v)) -> a -> SingMap kproxy f -> (a, SingMap kproxy g) -- | O(n). The function mapAccumRWithKey threads an -- accumulating argument through the map in descending order of keys. mapAccumRWithKey :: (forall v. a -> Sing v -> f v -> (a, g v)) -> a -> SingMap kproxy f -> (a, SingMap kproxy g) -- | O(n*log n). mapKeysWith c f s is the map -- obtained by applying f to each key of s. -- -- The size of the result may be smaller if f maps two or more -- distinct keys to the same new key. In this case the associated values -- will be combined using c. mapKeysWith :: (SOrd kproxy2, -- SDecide kproxy2) => (forall v. Sing v -> f v -> f v -> f -- v) -> (forall v. Sing v -> Sing v) -> SingMap kproxy1 f -> -- SingMap kproxy2 f mapKeysWith c f = fromListWithKey c . map fFirst . -- toList where fFirst (SomeSingWith1 x y) = (SomeSingWith1 (f x) y) -- -- O(n). mapKeysMonotonic f s == mapKeys f -- s, but works only when f is strictly monotonic. That is, -- for any values x and y, if x < -- y then f x < f y. The precondition is -- not checked. Semi-formally, we have: -- --
-- and [x < y ==> f x < f y | x <- ls, y <- ls] -- ==> mapKeysMonotonic f s == mapKeys f s -- where ls = keys s ---- -- This means that f maps distinct original keys to distinct -- resulting keys. This function has better performance than -- mapKeys. mapKeysMonotonic :: forall (kproxy1 :: KProxy k) -- kproxy2 f. (forall (v :: k). Sing v -> Sing v) -> SingMap -- kproxy1 f -> SingMap kproxy2 f mapKeysMonotonic _ Tip = Tip -- mapKeysMonotonic f (Bin sz k x l r) = Bin sz (f k) x (mapKeysMonotonic -- f l) (mapKeysMonotonic f r) -- -- O(n). Fold the keys and values in the map, such that -- foldWithKey f z == foldr (uncurry f) z . -- toAscList. -- -- This is identical to foldrWithKey, and you should use that one -- instead of this one. This name is kept for backward compatibility. -- | Deprecated: Use foldrWithKey instead foldWithKey :: (forall v. Sing v -> f v -> b -> b) -> b -> SingMap kproxy f -> b -- | O(n). Post-order fold. The function will be applied from the -- lowest value to the highest. foldrWithKey :: (forall v. Sing v -> f v -> b -> b) -> b -> SingMap kproxy f -> b -- | O(n). Pre-order fold. The function will be applied from the -- highest value to the lowest. foldlWithKey :: (forall v. b -> Sing v -> f v -> b) -> b -> SingMap kproxy f -> b -- | O(n). Return all keys of the map in ascending order. -- --
-- keys (fromList [(5,"a"), (3,"b")]) == [3,5] -- keys empty == [] --keys :: (kproxy ~ KProxy) => SingMap kproxy f -> [SomeSing kproxy] -- | O(n). Return all key/value pairs in the map in ascending key -- order. assocs :: (kproxy ~ KProxy) => SingMap kproxy f -> [SomeSingWith1 kproxy f] -- | O(n*log n). Build a map from a list of key/value pairs. See -- also fromAscList. If the list contains more than one value for -- the same key, the last value for the key is retained. fromList :: (SOrd kproxy, SDecide kproxy) => [SomeSingWith1 kproxy f] -> SingMap kproxy f -- | O(n*log n). Build a map from a list of key/value pairs with a -- combining function. See also fromAscListWithKey. fromListWithKey :: (SOrd kproxy, SDecide kproxy) => (forall v. Sing v -> f v -> f v -> f v) -> [SomeSingWith1 kproxy f] -> SingMap kproxy f -- | O(n). Convert to a list of key/value pairs. toList :: (kproxy ~ KProxy) => SingMap kproxy f -> [SomeSingWith1 kproxy f] -- | O(n). Convert to an ascending list. toAscList :: (kproxy ~ KProxy) => SingMap kproxy f -> [SomeSingWith1 kproxy f] -- | O(n). Convert to a descending list. toDescList :: (kproxy ~ KProxy) => SingMap kproxy f -> [SomeSingWith1 kproxy f] -- | O(n). Build a map from an ascending list in linear time. The -- precondition (input list is ascending) is not checked. fromAscList :: (SEq kproxy, SDecide kproxy) => [SomeSingWith1 kproxy f] -> SingMap kproxy f -- | O(n). Build a map from an ascending list in linear time with a -- combining function for equal keys. The precondition (input list is -- ascending) is not checked. fromAscListWithKey :: (SEq kproxy, SDecide kproxy) => (forall v. Sing v -> f v -> f v -> f v) -> [SomeSingWith1 kproxy f] -> SingMap kproxy f -- | O(n). Build a map from an ascending list of distinct elements -- in linear time. The precondition is not checked. fromDistinctAscList :: [SomeSingWith1 kproxy f] -> SingMap kproxy f -- | O(log n). The expression (split k map) is a -- pair (map1,map2) where the keys in map1 are smaller -- than k and the keys in map2 larger than k. -- Any key equal to k is found in neither map1 nor -- map2. split :: (SOrd kproxy, SDecide kproxy) => Sing v -> SingMap kproxy f -> (SingMap kproxy f, SingMap kproxy f) -- | O(log n). The expression (splitLookup k map) -- splits a map just like split but also returns lookup -- k map. splitLookup :: (SOrd kproxy, SDecide kproxy) => Sing v -> SingMap kproxy f -> (SingMap kproxy f, Maybe (f v), SingMap kproxy f) -- | O(log n). splitLookupWithKey :: (SOrd kproxy, SDecide kproxy) => Sing v -> SingMap kproxy f -> (SingMap kproxy f, Maybe (Sing v, f v), SingMap kproxy f) -- | O(n). The expression (showTreeWith showelem hang -- wide map) shows the tree that implements the map. Elements are -- shown using the showElem function. If hang is -- True, a hanging tree is shown otherwise a rotated tree -- is shown. If wide is True, an extra wide version is -- shown. showTreeWith :: (forall v. Sing v -> f v -> String) -> Bool -> Bool -> SingMap kproxy f -> String showsTree :: (forall v. Sing v -> f v -> String) -> Bool -> [String] -> [String] -> SingMap kproxy f -> ShowS showsTreeHang :: (forall v. Sing v -> f v -> String) -> Bool -> [String] -> SingMap kproxy f -> ShowS showWide :: Bool -> [String] -> String -> String showsBars :: [String] -> ShowS node :: String withBar :: [String] -> [String] withEmpty :: [String] -> [String] -- | O(n). Test if the internal map structure is valid. valid :: (SOrd kproxy, SDecide kproxy) => SingMap kproxy f -> Bool ordered :: (SOrd kproxy, SDecide kproxy) => SingMap kproxy f -> Bool -- | Exported only for Debug.QuickCheck balanced :: SingMap kproxy f -> Bool validsize :: SingMap kproxy f -> Bool foldlStrict :: (a -> b -> a) -> a -> [b] -> a ltSome :: SOrd kproxy => SomeSing kproxy -> SomeSing kproxy -> Bool gtSome :: SOrd kproxy => SomeSing kproxy -> SomeSing kproxy -> Bool unifyOnCompareEQ :: (SDecide kproxy, Compare a b ~ EQ) => Sing a -> Sing b -> (a ~ b => x) -> x unifyOnEq :: (SDecide kproxy, (a :== b) ~ True) => Sing a -> Sing b -> (a ~ b => x) -> x fromRec :: (SOrd kproxy, SDecide kproxy) => Rec (SingWith1 kproxy f) rs -> SingMap kproxy f insertRec :: (SOrd kproxy, SDecide kproxy) => Rec (SingWith1 kproxy f) rs -> SingMap kproxy f -> SingMap kproxy f instance forall (k :: BOX) (kproxy :: Data.Proxy.KProxy k) (f :: k -> *). (Data.Singletons.Prelude.Eq.SEq kproxy, Data.Singletons.Decide.SDecide kproxy, Data.Singletons.Class.EqSing1 f) => GHC.Classes.Eq (Data.Singletons.Map.SingMap kproxy f) instance forall (k :: BOX) (kproxy :: Data.Proxy.KProxy k) (f :: k -> *). (Data.Singletons.Class.HashableKind kproxy, Data.Singletons.Class.HashableSing1 f) => Data.Hashable.Class.Hashable (Data.Singletons.Map.SingMap kproxy f) instance forall (k :: BOX) (kproxy :: Data.Proxy.KProxy k) (f :: k -> *). (Data.Singletons.Class.ToJSONKeyKind kproxy, Data.Singletons.Class.ToJSONSing1 f) => Data.Aeson.Types.Class.ToJSON (Data.Singletons.Map.SingMap kproxy f) instance forall (k :: BOX) (kproxy :: Data.Proxy.KProxy k) (f :: k -> *). (Data.Singletons.Prelude.Ord.SOrd kproxy, Data.Singletons.Decide.SDecide kproxy, Data.Singletons.Class.FromJSONKeyKind kproxy, Data.Singletons.Class.FromJSONSing1 f) => Data.Aeson.Types.Class.FromJSON (Data.Singletons.Map.SingMap kproxy f)