@@ -15,12 +15,18 @@ module Reflex.Query.Class
15
15
, MonadQuery (.. )
16
16
, tellQueryDyn
17
17
, queryDyn
18
+ , mapQuery
19
+ , mapQueryResult
18
20
) where
19
21
22
+ import Control.Category (Category )
23
+ import qualified Control.Category as Cat
20
24
import Control.Monad.Reader
21
25
import Data.Bits
22
26
import Data.Data
23
27
import Data.Ix
28
+ import Data.Map.Monoidal (MonoidalMap )
29
+ import qualified Data.Map.Monoidal as MonoidalMap
24
30
import Data.Semigroup
25
31
import Foreign.Storable
26
32
@@ -30,13 +36,30 @@ class (Monoid (QueryResult a), Semigroup (QueryResult a)) => Query a where
30
36
type QueryResult a :: *
31
37
crop :: a -> QueryResult a -> QueryResult a
32
38
39
+ instance (Ord k , Query v ) => Query (MonoidalMap k v ) where
40
+ type QueryResult (MonoidalMap k v ) = MonoidalMap k (QueryResult v )
41
+ crop q r = MonoidalMap. intersectionWith (flip crop) r q
42
+
33
43
-- | NB: QueryMorphism's must be group homomorphisms when acting on the query type
34
44
-- and compatible with the query relationship when acting on the query result
35
45
data QueryMorphism q q' = QueryMorphism
36
46
{ _queryMorphism_mapQuery :: q -> q'
37
47
, _queryMorphism_mapQueryResult :: QueryResult q' -> QueryResult q
38
48
}
39
49
50
+ instance Category QueryMorphism where
51
+ id = QueryMorphism id id
52
+ qm . qm' = QueryMorphism
53
+ { _queryMorphism_mapQuery = mapQuery qm . mapQuery qm'
54
+ , _queryMorphism_mapQueryResult = mapQueryResult qm' . mapQueryResult qm
55
+ }
56
+
57
+ mapQuery :: QueryMorphism q q' -> q -> q'
58
+ mapQuery = _queryMorphism_mapQuery
59
+
60
+ mapQueryResult :: QueryMorphism q q' -> QueryResult q' -> QueryResult q
61
+ mapQueryResult = _queryMorphism_mapQueryResult
62
+
40
63
-- | This type keeps track of the multiplicity of elements of the view selector that are being used by the app
41
64
newtype SelectedCount = SelectedCount { unSelectedCount :: Int }
42
65
deriving (Eq , Ord , Show , Read , Integral , Num , Bounded , Enum , Real , Ix , Bits , FiniteBits , Storable , Data )
0 commit comments