-- 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)