-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | bijections with multiple implementations. -- -- Bijections between sets of values. @package bimaps @version 0.1.0.2 module Data.Bijection.Class -- | Bijection between finite sets. -- -- Both data types are strict here. data Bimap l r Bimap :: !l -> !r -> Bimap l r class DomCod z where type Dom z :: * type Cod z :: * where { type family Dom z :: *; type family Cod z :: *; } member :: DomCod z => z -> Dom z -> Bool lookup :: DomCod z => z -> Dom z -> Maybe (Cod z) deleteDC :: DomCod z => z -> Dom z -> Maybe (Cod z, z) insertDC :: DomCod z => z -> (Dom z, Cod z) -> z toListDC :: DomCod z => z -> [(Dom z, Cod z)] nullDC :: DomCod z => z -> Bool emptyDC :: DomCod z => z sizeDC :: DomCod z => z -> Int fromListDC :: DomCod z => [(Dom z, Cod z)] -> z type DomCodCnt l r = (DomCod l, DomCod r, Dom l ~ Cod r, Dom r ~ Cod l) contL :: Bimap l r -> l contR :: Bimap l r -> r memberL :: (DomCod l) => Bimap l r -> Dom l -> Bool memberR :: (DomCod r) => Bimap l r -> Dom r -> Bool lookupL :: (DomCod l) => Bimap l r -> Dom l -> Maybe (Cod l) lookupR :: (DomCod r) => Bimap l r -> Dom r -> Maybe (Cod r) empty :: (DomCodCnt l r) => Bimap l r null :: DomCod l => Bimap l r -> Bool size :: DomCod l => Bimap l r -> Int -- | Given a list of pairs [(x,y)], turn it into a bimap -- (x->y, y->x). fromList :: DomCodCnt l r => [(Dom l, Dom r)] -> Bimap l r toList :: DomCodCnt l r => Bimap l r -> [(Dom l, Dom r)] insert :: (DomCodCnt l r) => Bimap l r -> (Dom l, Cod l) -> Bimap l r deleteByL :: DomCodCnt l r => Bimap l r -> Dom l -> Bimap l r deleteByR :: DomCodCnt l r => Bimap l r -> Dom r -> Bimap l r findWithDefaultL :: DomCodCnt l r => Cod l -> Bimap l r -> Dom l -> Cod l findWithDefaultR :: DomCodCnt l r => Cod r -> Bimap l r -> Dom r -> Cod r instance GHC.Generics.Generic (Data.Bijection.Class.Bimap l r) instance (GHC.Classes.Eq r, GHC.Classes.Eq l) => GHC.Classes.Eq (Data.Bijection.Class.Bimap l r) instance (GHC.Show.Show r, GHC.Show.Show l) => GHC.Show.Show (Data.Bijection.Class.Bimap l r) instance (GHC.Read.Read r, GHC.Read.Read l) => GHC.Read.Read (Data.Bijection.Class.Bimap l r) instance (Control.DeepSeq.NFData l, Control.DeepSeq.NFData r) => Control.DeepSeq.NFData (Data.Bijection.Class.Bimap l r) instance (Data.Binary.Class.Binary l, Data.Binary.Class.Binary r) => Data.Binary.Class.Binary (Data.Bijection.Class.Bimap l r) instance (Data.Serialize.Serialize l, Data.Serialize.Serialize r) => Data.Serialize.Serialize (Data.Bijection.Class.Bimap l r) instance (Data.Bijection.Class.DomCodCnt l r, Data.Aeson.Types.ToJSON.ToJSON (Data.Bijection.Class.Dom l), Data.Aeson.Types.ToJSON.ToJSON (Data.Bijection.Class.Dom r)) => Data.Aeson.Types.ToJSON.ToJSON (Data.Bijection.Class.Bimap l r) instance (Data.Bijection.Class.DomCodCnt l r, Data.Aeson.Types.FromJSON.FromJSON (Data.Bijection.Class.Dom l), Data.Aeson.Types.FromJSON.FromJSON (Data.Bijection.Class.Dom r)) => Data.Aeson.Types.FromJSON.FromJSON (Data.Bijection.Class.Bimap l r) module Data.Bijection.HashMap -- | A map from keys to values. A map cannot contain duplicate keys; each -- key can map to at most one value. data HashMap k v :: * -> * -> * type BimapHashMap d c = Bimap (HashMap d c) (HashMap c d) instance (GHC.Classes.Eq d, Data.Hashable.Class.Hashable d) => Data.Bijection.Class.DomCod (Data.HashMap.Base.HashMap d c) -- | Bijections via strict maps. module Data.Bijection.Map -- | A Map from keys k to values a. data Map k a :: * -> * -> * instance (GHC.Classes.Eq d, GHC.Classes.Ord d) => Data.Bijection.Class.DomCod (Data.Map.Base.Map d c) -- | A bijection between boxed, immutable vectors. module Data.Bijection.Vector -- | Boxed vectors, supporting efficient slicing. data Vector a :: * -> * instance Data.Bijection.Class.DomCod (Data.Vector.Vector c) -- | A bijection between boxed, immutable vectors. module Data.Bijection.Vector.Storable -- | Storable-based vectors data Vector a :: * -> * instance Foreign.Storable.Storable c => Data.Bijection.Class.DomCod (Data.Vector.Storable.Vector c) -- | A bijection between boxed, immutable vectors. module Data.Bijection.Vector.Unboxed type Bi d c = Bimap (Vector d) (Vector c) instance Data.Vector.Unboxed.Base.Unbox c => Data.Bijection.Class.DomCod (Data.Vector.Unboxed.Base.Vector c)