Safe Haskell | None |
---|---|
Language | Haskell2010 |
This module provides deep embeddings of three things 1) Exp is a deep embedding of expressions over Sets and Maps as a typed data structure. 2) Fun is a deep embedding of symbolic functions 3) Query is a deep embedding of queries over Sets and Maps. It can be thought of as a low-level compiled form of Exp
Synopsis
-
data
Exp
t
where
- Base :: ( Ord k, Basic f, Iter f) => BaseRep f k v -> f k v -> Exp (f k v)
- Dom :: Ord k => Exp (f k v) -> Exp ( Sett k ())
- Rng :: ( Ord k, Ord v) => Exp (f k v) -> Exp ( Sett v ())
- DRestrict :: ( Ord k, Iter g) => Exp (g k ()) -> Exp (f k v) -> Exp (f k v)
- DExclude :: ( Ord k, Iter g) => Exp (g k ()) -> Exp (f k v) -> Exp (f k v)
- RRestrict :: ( Ord k, Iter g, Ord v) => Exp (f k v) -> Exp (g v ()) -> Exp (f k v)
- RExclude :: ( Ord k, Iter g, Ord v) => Exp (f k v) -> Exp (g v ()) -> Exp (f k v)
- Elem :: ( Ord k, Iter g, Show k) => k -> Exp (g k ()) -> Exp Bool
- NotElem :: ( Ord k, Iter g, Show k) => k -> Exp (g k ()) -> Exp Bool
- Intersect :: ( Ord k, Iter f, Iter g) => Exp (f k v) -> Exp (g k u) -> Exp ( Sett k ())
- Subset :: ( Ord k, Iter f, Iter g) => Exp (f k v) -> Exp (g k u) -> Exp Bool
- SetDiff :: ( Ord k, Iter f, Iter g) => Exp (f k v) -> Exp (g k u) -> Exp (f k v)
- UnionOverrideLeft :: ( Show k, Show v, Ord k) => Exp (f k v) -> Exp (g k v) -> Exp (f k v)
- UnionPlus :: ( Ord k, Monoid n) => Exp (f k n) -> Exp (g k n) -> Exp (f k n)
- UnionOverrideRight :: Ord k => Exp (f k v) -> Exp (g k v) -> Exp (f k v)
- Singleton :: Ord k => k -> v -> Exp ( Single k v)
- SetSingleton :: Ord k => k -> Exp ( Single k ())
- KeyEqual :: ( Ord k, Iter f, Iter g) => Exp (f k v) -> Exp (g k u) -> Exp Bool
- class HasExp s t | s -> t where
- dRestrict :: ( Ord k, Iter g) => Exp (g k ()) -> Exp (f k v) -> Exp (f k v)
- rRestrict :: ( Ord k, Iter g, Ord v) => Exp (f k v) -> Exp (g v ()) -> Exp (f k v)
- dExclude :: ( Ord k, Iter g) => Exp (g k ()) -> Exp (f k v) -> Exp (f k v)
- rExclude :: ( Ord k, Iter g, Ord v) => Exp (f k v) -> Exp (g v ()) -> Exp (f k v)
- dom :: ( Ord k, HasExp s (f k v)) => s -> Exp ( Sett k ())
- rng :: ( Ord k, Ord v) => HasExp s (f k v) => s -> Exp ( Sett v ())
- (◁) :: ( Ord k, HasExp s1 ( Sett k ()), HasExp s2 (f k v)) => s1 -> s2 -> Exp (f k v)
- (<|) :: ( Ord k, HasExp s1 ( Sett k ()), HasExp s2 (f k v)) => s1 -> s2 -> Exp (f k v)
- drestrict :: ( Ord k, HasExp s1 ( Sett k ()), HasExp s2 (f k v)) => s1 -> s2 -> Exp (f k v)
- (⋪) :: ( Ord k, Iter g, HasExp s1 (g k ()), HasExp s2 (f k v)) => s1 -> s2 -> Exp (f k v)
- dexclude :: ( Ord k, Iter g, HasExp s1 (g k ()), HasExp s2 (f k v)) => s1 -> s2 -> Exp (f k v)
- (▷) :: ( Ord k, Iter g, Ord v, HasExp s1 (f k v), HasExp s2 (g v ())) => s1 -> s2 -> Exp (f k v)
- (|>) :: ( Ord k, Iter g, Ord v, HasExp s1 (f k v), HasExp s2 (g v ())) => s1 -> s2 -> Exp (f k v)
- rrestrict :: ( Ord k, Iter g, Ord v, HasExp s1 (f k v), HasExp s2 (g v ())) => s1 -> s2 -> Exp (f k v)
- (⋫) :: ( Ord k, Iter g, Ord v, HasExp s1 (f k v), HasExp s2 (g v ())) => s1 -> s2 -> Exp (f k v)
- rexclude :: ( Ord k, Iter g, Ord v, HasExp s1 (f k v), HasExp s2 (g v ())) => s1 -> s2 -> Exp (f k v)
- (∈) :: ( Show k, Ord k, Iter g, HasExp s (g k ())) => k -> s -> Exp Bool
- (∉) :: ( Show k, Ord k, Iter g, HasExp s (g k ())) => k -> s -> Exp Bool
- notelem :: ( Show k, Ord k, Iter g, HasExp s (g k ())) => k -> s -> Exp Bool
- (∪) :: ( Show k, Show v, Ord k, HasExp s1 (f k v), HasExp s2 (g k v)) => s1 -> s2 -> Exp (f k v)
- unionleft :: ( Show k, Show v, Ord k, HasExp s1 (f k v), HasExp s2 (g k v)) => s1 -> s2 -> Exp (f k v)
- (⨃) :: ( Ord k, HasExp s1 (f k v), HasExp s2 (g k v)) => s1 -> s2 -> Exp (f k v)
- unionright :: ( Ord k, HasExp s1 (f k v), HasExp s2 (g k v)) => s1 -> s2 -> Exp (f k v)
- (∪+) :: ( Ord k, Monoid n, HasExp s1 (f k n), HasExp s2 (g k n)) => s1 -> s2 -> Exp (f k n)
- unionplus :: ( Ord k, Monoid n, HasExp s1 (f k n), HasExp s2 (g k n)) => s1 -> s2 -> Exp (f k n)
- singleton :: Ord k => k -> v -> Exp ( Single k v)
- setSingleton :: Ord k => k -> Exp ( Single k ())
- (∩) :: ( Ord k, Iter f, Iter g, HasExp s1 (f k v), HasExp s2 (g k u)) => s1 -> s2 -> Exp ( Sett k ())
- intersect :: ( Ord k, Iter f, Iter g, HasExp s1 (f k v), HasExp s2 (g k u)) => s1 -> s2 -> Exp ( Sett k ())
- (⊆) :: ( Ord k, Iter f, Iter g, HasExp s1 (f k v), HasExp s2 (g k u)) => s1 -> s2 -> Exp Bool
- subset :: ( Ord k, Iter f, Iter g, HasExp s1 (f k v), HasExp s2 (g k u)) => s1 -> s2 -> Exp Bool
- (➖) :: ( Ord k, Iter f, Iter g, HasExp s1 (f k v), HasExp s2 (g k u)) => s1 -> s2 -> Exp (f k v)
- setdiff :: ( Ord k, Iter f, Iter g, HasExp s1 (f k v), HasExp s2 (g k u)) => s1 -> s2 -> Exp (f k v)
- (≍) :: ( Ord k, Iter f, Iter g, HasExp s1 (f k v), HasExp s2 (g k u)) => s1 -> s2 -> Exp Bool
- keyeq :: ( Ord k, Iter f, Iter g, HasExp s1 (f k v), HasExp s2 (g k u)) => s1 -> s2 -> Exp Bool
- data Fun t = Fun ( Lam t) t
- data Pat env t where
-
data
Expr
env t
where
- X1 :: Expr (d, c, b, a) d
- X2 :: Expr (d, c, b, a) c
- X3 :: Expr (d, c, b, a) b
- X4 :: Expr (d, c, b, a) a
- HasKey :: ( Iter f, Ord k) => Expr e k -> f k v -> Expr e Bool
- Neg :: Expr e Bool -> Expr e Bool
- Ap :: Lam (a -> b -> c) -> Expr e a -> Expr e b -> Expr e c
- EPair :: Expr e a -> Expr e b -> Expr e (a, b)
- FST :: Expr e (a, b) -> Expr e a
- SND :: Expr e (a, b) -> Expr e b
- Lit :: Show t => t -> Expr env t
- data Lam t where
- type StringEnv = ( String , String , String , String )
- bindE :: Pat (a, b, c, d) t -> Expr (w, x, y, z) t -> StringEnv -> StringEnv
- showE :: StringEnv -> Expr (a, b, c, d) t -> String
- showL :: StringEnv -> Lam t -> String
- showP :: StringEnv -> Pat any t -> String
- apply :: Fun t -> t
- first :: Fun (v -> s -> v)
- second :: Fun (v -> s -> s)
- plus :: Monoid t => Fun (t -> t -> t)
- eql :: Eq t => Fun (t -> t -> Bool )
- constant :: Show c => c -> Fun (a -> b -> c)
- rngElem :: ( Ord rng, Iter f) => f rng v -> Fun (dom -> rng -> Bool )
- domElem :: ( Ord dom, Iter f) => f dom v -> Fun (dom -> rng -> Bool )
- rngFst :: Fun (x -> (a, b) -> a)
- rngSnd :: Fun (x -> (a, b) -> b)
- compose1 :: Fun (t1 -> t2 -> t3) -> Fun (t1 -> t4 -> t2) -> Fun (t1 -> t4 -> t3)
- compSndL :: Fun (k -> (a, b) -> c) -> Fun (k -> d -> a) -> Fun (k -> (d, b) -> c)
- compSndR :: Fun (k -> (a, b) -> c) -> Fun (k -> d -> b) -> Fun (k -> (a, d) -> c)
- compCurryR :: Fun (k -> (a, b) -> d) -> Fun (a -> c -> b) -> Fun (k -> (a, c) -> d)
- nEgate :: Fun (k -> v -> Bool ) -> Fun (k -> v -> Bool )
- always :: Fun (a -> b -> Bool )
- both :: Fun (a -> b -> Bool ) -> Fun (a -> b -> Bool ) -> Fun (a -> b -> Bool )
- lift :: (a -> b -> c) -> Fun (a -> b -> c)
-
data
Query
k v
where
- BaseD :: ( Iter f, Ord k) => BaseRep f k v -> f k v -> Query k v
- ProjectD :: Ord k => Query k v -> Fun (k -> v -> u) -> Query k u
- AndD :: Ord k => Query k v -> Query k w -> Query k (v, w)
- ChainD :: ( Ord k, Ord v) => Query k v -> Query v w -> Fun (k -> (v, w) -> u) -> Query k u
- AndPD :: Ord k => Query k v -> Query k u -> Fun (k -> (v, u) -> w) -> Query k w
- OrD :: Ord k => Query k v -> Query k v -> Fun (v -> v -> v) -> Query k v
- GuardD :: Ord k => Query k v -> Fun (k -> v -> Bool ) -> Query k v
- DiffD :: Ord k => Query k v -> Query k u -> Query k v
- smart :: Bool
- projD :: Ord k => Query k v -> Fun (k -> v -> u) -> Query k u
- andD :: Ord k => Query k v1 -> Query k v2 -> Query k (v1, v2)
- andPD :: Ord k => Query k v1 -> Query k u -> Fun (k -> (v1, u) -> v) -> Query k v
- chainD :: ( Ord k, Ord v) => Query k v -> Query v w -> Fun (k -> (v, w) -> u) -> Query k u
- guardD :: Ord k => Query k v -> Fun (k -> v -> Bool ) -> Query k v
- projectQ :: ( Ord k, HasQuery c k v) => c -> Fun (k -> v -> u) -> Query k u
- andQ :: ( Ord k, HasQuery concrete1 k v, HasQuery concrete2 k w) => concrete1 -> concrete2 -> Query k (v, w)
- orQ :: ( Ord k, HasQuery concrete1 k v, HasQuery concrete2 k v) => concrete1 -> concrete2 -> Fun (v -> v -> v) -> Query k v
- chainQ :: ( Ord k, Ord v, HasQuery concrete1 k v, HasQuery concrete2 v w) => concrete1 -> concrete2 -> Fun (k -> (v, w) -> u) -> Query k u
- andPQ :: ( Ord k, HasQuery concrete1 k v, HasQuery concrete2 k u) => concrete1 -> concrete2 -> Fun (k -> (v, u) -> w) -> Query k w
- guardQ :: ( Ord k, HasQuery concrete k v) => concrete -> Fun (k -> v -> Bool ) -> Query k v
- diffQ :: forall k v u concrete1 concrete2. ( Ord k, HasQuery (concrete1 k v) k v, HasQuery (concrete2 k u) k u) => concrete1 k v -> concrete2 k u -> Query k v
- class HasQuery concrete k v where
- ppQuery :: Query k v -> Doc
- nxtQuery :: Query a b -> Collect (a, b, Query a b)
- lubQuery :: Ord a => a -> Query a b -> Collect (a, b, Query a b)
- projStep :: Ord k => (t -> Collect (k, v, Query k v)) -> Fun (k -> v -> u) -> t -> Collect (k, u, Query k u)
- andStep :: Ord a => (a, b1, Query a b1) -> (a, b2, Query a b2) -> Collect (a, (b1, b2), Query a (b1, b2))
- chainStep :: ( Ord b, Ord a) => (a, b, Query a b) -> Query b w -> Fun (a -> (b, w) -> u) -> Collect (a, u, Query a u)
- andPstep :: Ord a => (a, b1, Query a b1) -> (a, b2, Query a b2) -> Fun (a -> (b1, b2) -> w) -> Collect (a, w, Query a w)
- orStep :: ( Ord k, Ord a) => ( Query k v -> Collect (a, v, Query k v)) -> Query k v -> Query k v -> Fun (v -> v -> v) -> Collect (a, v, Query k v)
- guardStep :: Ord a => ( Query a b -> Collect (a, b, Query a b)) -> Fun (a -> b -> Bool ) -> Query a b -> Collect (a, b, Query a b)
- diffStep :: Ord k => (k, v, Query k v) -> Query k u -> Collect (k, v, Query k v)
Documentation
The self typed GADT: Exp, that encodes the shape of Set expressions. A deep embedding. Exp is a typed Symbolic representation of queries we may ask. It allows us to introspect a query The strategy is to 1) Define Exp so all queries can be represented. 2) Define smart constructors that "parse" the surface syntax, and build a typed Exp 3) Write an evaluate function: eval:: Exp t -> t 4) "eval" can introspect the code and apply efficient domain and type specific translations 5) Use the (Iter f) class to evaluate some Exp that can benefit from its efficient nature.
Base :: ( Ord k, Basic f, Iter f) => BaseRep f k v -> f k v -> Exp (f k v) | |
Dom :: Ord k => Exp (f k v) -> Exp ( Sett k ()) | |
Rng :: ( Ord k, Ord v) => Exp (f k v) -> Exp ( Sett v ()) | |
DRestrict :: ( Ord k, Iter g) => Exp (g k ()) -> Exp (f k v) -> Exp (f k v) | |
DExclude :: ( Ord k, Iter g) => Exp (g k ()) -> Exp (f k v) -> Exp (f k v) | |
RRestrict :: ( Ord k, Iter g, Ord v) => Exp (f k v) -> Exp (g v ()) -> Exp (f k v) | |
RExclude :: ( Ord k, Iter g, Ord v) => Exp (f k v) -> Exp (g v ()) -> Exp (f k v) | |
Elem :: ( Ord k, Iter g, Show k) => k -> Exp (g k ()) -> Exp Bool | |
NotElem :: ( Ord k, Iter g, Show k) => k -> Exp (g k ()) -> Exp Bool | |
Intersect :: ( Ord k, Iter f, Iter g) => Exp (f k v) -> Exp (g k u) -> Exp ( Sett k ()) | |
Subset :: ( Ord k, Iter f, Iter g) => Exp (f k v) -> Exp (g k u) -> Exp Bool | |
SetDiff :: ( Ord k, Iter f, Iter g) => Exp (f k v) -> Exp (g k u) -> Exp (f k v) | |
UnionOverrideLeft :: ( Show k, Show v, Ord k) => Exp (f k v) -> Exp (g k v) -> Exp (f k v) | |
UnionPlus :: ( Ord k, Monoid n) => Exp (f k n) -> Exp (g k n) -> Exp (f k n) | |
UnionOverrideRight :: Ord k => Exp (f k v) -> Exp (g k v) -> Exp (f k v) | |
Singleton :: Ord k => k -> v -> Exp ( Single k v) | |
SetSingleton :: Ord k => k -> Exp ( Single k ()) | |
KeyEqual :: ( Ord k, Iter f, Iter g) => Exp (f k v) -> Exp (g k u) -> Exp Bool |
class HasExp s t | s -> t where Source #
Basic types are those that can be embedded into Exp.
The HasExp class, encodes how to lift a Basic type into an Exp.
The function
toExp
will build a typed Exp for that Basic type.
This will be really usefull in the smart constructors.
Instances
HasExp ( Exp t) t Source # |
The simplest Base type is one that is already an Exp |
Ord k => HasExp [(k, v)] ( List k v) Source # | |
Ord k => HasExp ( Set k) ( Sett k ()) Source # | |
Ord k => HasExp ( Map k v) ( Map k v) Source # | |
( Ord k, Ord v) => HasExp ( Bimap k v) ( Bimap k v) Source # | |
Ord k => HasExp ( Single k v) ( Single k v) Source # | |
( UnifiedView coin cred pool ptr k v, Ord k, Monoid coin, Ord coin, Ord cred, Ord ptr, Ord pool) => HasExp ( View coin cred pool ptr k v) ( View coin cred pool ptr k v) Source # | |
drestrict :: ( Ord k, HasExp s1 ( Sett k ()), HasExp s2 (f k v)) => s1 -> s2 -> Exp (f k v) Source #
dexclude :: ( Ord k, Iter g, HasExp s1 (g k ()), HasExp s2 (f k v)) => s1 -> s2 -> Exp (f k v) Source #
(▷) :: ( Ord k, Iter g, Ord v, HasExp s1 (f k v), HasExp s2 (g v ())) => s1 -> s2 -> Exp (f k v) Source #
(|>) :: ( Ord k, Iter g, Ord v, HasExp s1 (f k v), HasExp s2 (g v ())) => s1 -> s2 -> Exp (f k v) Source #
rrestrict :: ( Ord k, Iter g, Ord v, HasExp s1 (f k v), HasExp s2 (g v ())) => s1 -> s2 -> Exp (f k v) Source #
(⋫) :: ( Ord k, Iter g, Ord v, HasExp s1 (f k v), HasExp s2 (g v ())) => s1 -> s2 -> Exp (f k v) Source #
rexclude :: ( Ord k, Iter g, Ord v, HasExp s1 (f k v), HasExp s2 (g v ())) => s1 -> s2 -> Exp (f k v) Source #
(∪) :: ( Show k, Show v, Ord k, HasExp s1 (f k v), HasExp s2 (g k v)) => s1 -> s2 -> Exp (f k v) Source #
unionleft :: ( Show k, Show v, Ord k, HasExp s1 (f k v), HasExp s2 (g k v)) => s1 -> s2 -> Exp (f k v) Source #
(∪+) :: ( Ord k, Monoid n, HasExp s1 (f k n), HasExp s2 (g k n)) => s1 -> s2 -> Exp (f k n) Source #
unionplus :: ( Ord k, Monoid n, HasExp s1 (f k n), HasExp s2 (g k n)) => s1 -> s2 -> Exp (f k n) Source #
(∩) :: ( Ord k, Iter f, Iter g, HasExp s1 (f k v), HasExp s2 (g k u)) => s1 -> s2 -> Exp ( Sett k ()) Source #
intersect :: ( Ord k, Iter f, Iter g, HasExp s1 (f k v), HasExp s2 (g k u)) => s1 -> s2 -> Exp ( Sett k ()) Source #
(⊆) :: ( Ord k, Iter f, Iter g, HasExp s1 (f k v), HasExp s2 (g k u)) => s1 -> s2 -> Exp Bool Source #
subset :: ( Ord k, Iter f, Iter g, HasExp s1 (f k v), HasExp s2 (g k u)) => s1 -> s2 -> Exp Bool Source #
(➖) :: ( Ord k, Iter f, Iter g, HasExp s1 (f k v), HasExp s2 (g k u)) => s1 -> s2 -> Exp (f k v) Source #
setdiff :: ( Ord k, Iter f, Iter g, HasExp s1 (f k v), HasExp s2 (g k u)) => s1 -> s2 -> Exp (f k v) Source #
(≍) :: ( Ord k, Iter f, Iter g, HasExp s1 (f k v), HasExp s2 (g k u)) => s1 -> s2 -> Exp Bool Source #
keyeq :: ( Ord k, Iter f, Iter g, HasExp s1 (f k v), HasExp s2 (g k u)) => s1 -> s2 -> Exp Bool Source #
An symbolic function Fun has two parts, a Lam that can be analyzed, and real function that can be applied
Symbolc functions (Fun) are data, that can be pattern matched over. They 1) Represent a wide class of binary functions that are used in translating the SetAlgebra 2) Turned into a String so they can be printed 3) Turned into the function they represent. 4) Composed into bigger functions 5) Symbolically symplified Here we implement Symbolic Binary functions with upto 4 variables, which is enough for this use =================================================================================================
data Expr env t where Source #
X1 :: Expr (d, c, b, a) d | |
X2 :: Expr (d, c, b, a) c | |
X3 :: Expr (d, c, b, a) b | |
X4 :: Expr (d, c, b, a) a | |
HasKey :: ( Iter f, Ord k) => Expr e k -> f k v -> Expr e Bool | |
Neg :: Expr e Bool -> Expr e Bool | |
Ap :: Lam (a -> b -> c) -> Expr e a -> Expr e b -> Expr e c | |
EPair :: Expr e a -> Expr e b -> Expr e (a, b) | |
FST :: Expr e (a, b) -> Expr e a | |
SND :: Expr e (a, b) -> Expr e b | |
Lit :: Show t => t -> Expr env t |
BaseD :: ( Iter f, Ord k) => BaseRep f k v -> f k v -> Query k v | |
ProjectD :: Ord k => Query k v -> Fun (k -> v -> u) -> Query k u | |
AndD :: Ord k => Query k v -> Query k w -> Query k (v, w) | |
ChainD :: ( Ord k, Ord v) => Query k v -> Query v w -> Fun (k -> (v, w) -> u) -> Query k u | |
AndPD :: Ord k => Query k v -> Query k u -> Fun (k -> (v, u) -> w) -> Query k w | |
OrD :: Ord k => Query k v -> Query k v -> Fun (v -> v -> v) -> Query k v | |
GuardD :: Ord k => Query k v -> Fun (k -> v -> Bool ) -> Query k v | |
DiffD :: Ord k => Query k v -> Query k u -> Query k v |
Instances
Iter Query Source # | |
Defined in Control.Iterate.Exp nxt :: Query a b -> Collect (a, b, Query a b) Source # lub :: Ord k => k -> Query k b -> Collect (k, b, Query k b) Source # hasNxt :: Query a b -> Maybe (a, b, Query a b) Source # hasLub :: Ord k => k -> Query k b -> Maybe (k, b, Query k b) Source # haskey :: Ord key => key -> Query key b -> Bool Source # isnull :: Query k v -> Bool Source # lookup :: Ord key => key -> Query key rng -> Maybe rng Source # |
|
Show ( Query k v) Source # | |
HasQuery ( Query k v) k v Source # | |
andQ :: ( Ord k, HasQuery concrete1 k v, HasQuery concrete2 k w) => concrete1 -> concrete2 -> Query k (v, w) Source #
orQ :: ( Ord k, HasQuery concrete1 k v, HasQuery concrete2 k v) => concrete1 -> concrete2 -> Fun (v -> v -> v) -> Query k v Source #
chainQ :: ( Ord k, Ord v, HasQuery concrete1 k v, HasQuery concrete2 v w) => concrete1 -> concrete2 -> Fun (k -> (v, w) -> u) -> Query k u Source #
andPQ :: ( Ord k, HasQuery concrete1 k v, HasQuery concrete2 k u) => concrete1 -> concrete2 -> Fun (k -> (v, u) -> w) -> Query k w Source #
guardQ :: ( Ord k, HasQuery concrete k v) => concrete -> Fun (k -> v -> Bool ) -> Query k v Source #
diffQ :: forall k v u concrete1 concrete2. ( Ord k, HasQuery (concrete1 k v) k v, HasQuery (concrete2 k u) k u) => concrete1 k v -> concrete2 k u -> Query k v Source #
class HasQuery concrete k v where Source #
Instances
Ord k => HasQuery [(k, v)] k v Source # | |
Defined in Control.Iterate.Exp |
|
Ord k => HasQuery ( Set k) k () Source # | |
Ord k => HasQuery ( Map k v) k v Source # | |
Ord k => HasQuery ( Single k v) k v Source # | |
HasQuery ( Query k v) k v Source # | |
( Ord v, Ord k) => HasQuery ( BiMap v k v) k v Source # | |
( UnifiedView coin cred pool ptr k v, Monoid coin, Ord k, Ord coin, Ord cred, Ord ptr, Ord pool) => HasQuery ( View coin cred pool ptr k v) k v Source # | |
projStep :: Ord k => (t -> Collect (k, v, Query k v)) -> Fun (k -> v -> u) -> t -> Collect (k, u, Query k u) Source #
andStep :: Ord a => (a, b1, Query a b1) -> (a, b2, Query a b2) -> Collect (a, (b1, b2), Query a (b1, b2)) Source #
chainStep :: ( Ord b, Ord a) => (a, b, Query a b) -> Query b w -> Fun (a -> (b, w) -> u) -> Collect (a, u, Query a u) Source #
andPstep :: Ord a => (a, b1, Query a b1) -> (a, b2, Query a b2) -> Fun (a -> (b1, b2) -> w) -> Collect (a, w, Query a w) Source #
orStep :: ( Ord k, Ord a) => ( Query k v -> Collect (a, v, Query k v)) -> Query k v -> Query k v -> Fun (v -> v -> v) -> Collect (a, v, Query k v) Source #