-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Heterogeneous map by open unions. -- @package union-map @version 0.0 module Data.OpenUnion.Internal data Union (as :: [*]) Single :: a -> Union (a : as) Union :: Union as -> Union (a : as) Exhausted :: Union [] -> Union [] exhaust :: Union [] -> a (||>) :: (a -> r) -> (Union as -> r) -> (Union (a : as) -> r) data Position (a :: *) (as :: [*]) Zero :: Position a (a : as) Succ :: Position a as -> Position a (b : as) class Member a as | as -> a position :: Member a as => Position a as -- | Lift a value into a Union. liftU :: Member a as => a -> Union as -- | Traversal for a specific element. picked :: (Applicative f, Member a as) => (a -> f a) -> Union as -> f (Union as) -- | Retrieve the value from a Union. retractU :: Member a as => Union as -> Maybe a -- | Lift a function into Union. hoistU :: Member a as => (a -> a) -> Union as -> Union as -- | Instead of Identity. newtype Id a Id :: a -> Id a getId :: Id a -> a class Include as bs reunion :: Include as bs => Union as -> Union bs type (∈) a as = Member a as type (⊆) as bs = Include as bs type (=) as bs = (Include as bs, Include bs as) instance [overlap ok] Include '[] bs instance [overlap ok] (Member a bs, Include as bs) => Include (a : as) bs instance [overlap ok] Applicative Id instance [overlap ok] Functor Id instance [overlap ok] Member a as => Member a (b : as) instance [overlap ok] Member a (a : as) instance [overlap ok] (All Show r) => Show (Union r) module Data.OpenUnion data Union (as :: [*]) exhaust :: Union [] -> a (||>) :: (a -> r) -> (Union as -> r) -> (Union (a : as) -> r) -- | Traversal for a specific element. picked :: (Applicative f, Member a as) => (a -> f a) -> Union as -> f (Union as) -- | Lift a value into a Union. liftU :: Member a as => a -> Union as -- | Retrieve the value from a Union. retractU :: Member a as => Union as -> Maybe a -- | Lift a function into Union. hoistU :: Member a as => (a -> a) -> Union as -> Union as class Member a as | as -> a class Include as bs reunion :: Include as bs => Union as -> Union bs type (∈) a as = Member a as type (⊆) as bs = Include as bs type (=) as bs = (Include as bs, Include bs as) -- | An implementation of heterogeneous tree-map by open unions. This -- module uses the Data.IntMap inside, see also -- https://hackage.haskell.org/package/containers. module Data.UnionIntMap data UnionIntMap r (\\) :: UnionIntMap r -> UnionIntMap r -> UnionIntMap r (!) :: Member a as => UnionIntMap as -> Key -> a empty :: UnionIntMap r singleton :: Member a as => Key -> a -> UnionIntMap as null :: UnionIntMap r -> Bool size :: UnionIntMap r -> Int member :: Key -> UnionIntMap r -> Bool notMember :: Key -> UnionIntMap r -> Bool lookup :: Member a as => Key -> UnionIntMap as -> Maybe a lookupU :: Key -> UnionIntMap r -> Maybe (Union r) find :: Member a as => Key -> UnionIntMap as -> a findU :: Key -> UnionIntMap r -> Union r findWithDefault :: Member a as => a -> Key -> UnionIntMap as -> a insert :: Member a as => Key -> a -> UnionIntMap as -> UnionIntMap as insertWith :: Member a as => (a -> a -> a) -> Key -> a -> UnionIntMap as -> UnionIntMap as insertWithKey :: Member a as => (Key -> a -> a -> a) -> Key -> a -> UnionIntMap as -> UnionIntMap as delete :: Key -> UnionIntMap as -> UnionIntMap as adjust :: Member a as => (a -> a) -> Key -> UnionIntMap as -> UnionIntMap as adjustWithKey :: Member a as => (Key -> a -> a) -> Key -> UnionIntMap as -> UnionIntMap as update :: Member a as => (a -> Maybe a) -> Key -> UnionIntMap as -> UnionIntMap as updateWithKey :: Member a as => (Key -> a -> Maybe a) -> Key -> UnionIntMap as -> UnionIntMap as union :: UnionIntMap r -> UnionIntMap r -> UnionIntMap r unions :: [UnionIntMap r] -> UnionIntMap r difference :: UnionIntMap r -> UnionIntMap r -> UnionIntMap r intersection :: UnionIntMap r -> UnionIntMap r -> UnionIntMap r keys :: UnionIntMap r -> [Key] rebuild :: Include r s => UnionIntMap r -> UnionIntMap s mapU :: (Union r -> Union s) -> UnionIntMap r -> UnionIntMap s mapWithKeyU :: (Key -> Union r -> Union s) -> UnionIntMap r -> UnionIntMap s mapU' :: (Union r -> a) -> UnionIntMap r -> IntMap a mapWithKeyU' :: (Key -> Union r -> a) -> UnionIntMap r -> IntMap a filterU :: (Union r -> Bool) -> UnionIntMap r -> UnionIntMap r filterWithKeyU :: (Key -> Union r -> Bool) -> UnionIntMap r -> UnionIntMap r foldrU :: (Union r -> b -> b) -> b -> UnionIntMap r -> b foldrWithKeyU :: (Key -> Union r -> b -> b) -> b -> UnionIntMap r -> b foldlU' :: (a -> Union r -> a) -> a -> UnionIntMap r -> a foldlWithKeyU' :: (a -> Key -> Union r -> a) -> a -> UnionIntMap r -> a showTree :: Show (Union r) => UnionIntMap r -> String -- | An implementation of heterogeneous tree-map by open unions. This -- module uses the Data.Map module inside, see also -- https://hackage.haskell.org/package/containers. module Data.UnionMap data UnionMap k r (\\) :: Ord k => UnionMap k r -> UnionMap k r -> UnionMap k r (!) :: (Ord k, Member a as) => UnionMap k as -> k -> a empty :: UnionMap k r singleton :: (Ord k, Member a as) => k -> a -> UnionMap k as null :: UnionMap k r -> Bool size :: UnionMap k r -> Int member :: Ord k => k -> UnionMap k r -> Bool notMember :: Ord k => k -> UnionMap k r -> Bool lookup :: (Ord k, Member a as) => k -> UnionMap k as -> Maybe a lookupU :: Ord k => k -> UnionMap k r -> Maybe (Union r) find :: (Ord k, Member a as) => k -> UnionMap k as -> a findU :: Ord k => k -> UnionMap k r -> Union r findWithDefault :: (Ord k, Member a as) => a -> k -> UnionMap k as -> a insert :: (Ord k, Member a as) => k -> a -> UnionMap k as -> UnionMap k as insertWith :: (Ord k, Member a as) => (a -> a -> a) -> k -> a -> UnionMap k as -> UnionMap k as insertWithKey :: (Ord k, Member a as) => (k -> a -> a -> a) -> k -> a -> UnionMap k as -> UnionMap k as delete :: Ord k => k -> UnionMap k as -> UnionMap k as adjust :: (Ord k, Member a as) => (a -> a) -> k -> UnionMap k as -> UnionMap k as adjustWithKey :: (Ord k, Member a as) => (k -> a -> a) -> k -> UnionMap k as -> UnionMap k as update :: (Ord k, Member a as) => (a -> Maybe a) -> k -> UnionMap k as -> UnionMap k as updateWithKey :: (Ord k, Member a as) => (k -> a -> Maybe a) -> k -> UnionMap k as -> UnionMap k as union :: Ord k => UnionMap k r -> UnionMap k r -> UnionMap k r unions :: Ord k => [UnionMap k r] -> UnionMap k r difference :: Ord k => UnionMap k r -> UnionMap k r -> UnionMap k r intersection :: Ord k => UnionMap k r -> UnionMap k r -> UnionMap k r keys :: UnionMap k r -> [k] rebuild :: Include r s => UnionMap k r -> UnionMap k s mapU :: (Union r -> Union s) -> UnionMap k r -> UnionMap k s mapWithKeyU :: (k -> Union r -> Union s) -> UnionMap k r -> UnionMap k s mapU' :: (Union r -> a) -> UnionMap k r -> Map k a mapWithKeyU' :: (k -> Union r -> a) -> UnionMap k r -> Map k a filterU :: (Union r -> Bool) -> UnionMap k r -> UnionMap k r filterWithKeyU :: (k -> Union r -> Bool) -> UnionMap k r -> UnionMap k r foldrU :: (Union r -> b -> b) -> b -> UnionMap k r -> b foldrWithKeyU :: (k -> Union r -> b -> b) -> b -> UnionMap k r -> b foldlU' :: (a -> Union r -> a) -> a -> UnionMap k r -> a foldlWithKeyU' :: (a -> k -> Union r -> a) -> a -> UnionMap k r -> a showTree :: (Show k, Show (Union r)) => UnionMap k r -> String