on develop help sign in
Merge pull request #380 from reflex-frp/mapQueryT

Add mapQueryT

commit02d2cefa38433aeab995aa2ae5c29d84be32b625 authorJohn Ericson <John.Ericson@Obsidian.Systems> dateWed 8 Jan 2020, 16:20 (7 years ago) parentfd3893172ec2a9
2 files changed+9
ChangeLog.md+4 src/Reflex/Query/Base.hs+5
ChangeLog.md+4
@@ -1,5 +1,9 @@
11# Revision history for reflex
22
3+## Unreleased
4+
5+* Add `Reflex.Query.Base.mapQueryT`. See that module for documentation
6+
37## 0.6.3
48
59* `Data.WeakBag.traverse` and `Data.FastWeakBag.traverse` have been deprecated.
src/Reflex/Query/Base.hs+5
@@ -16,6 +16,7 @@ module Reflex.Query.Base
1616 , mapQueryResult
1717 , dynWithQueryT
1818 , withQueryT
19+ , mapQueryT
1920 ) where
2021
2122import Control.Applicative (liftA2)
@@ -287,6 +288,10 @@ withQueryT f a = do
287288 (fmapCheap (AdditivePatch . mapQuery f . unAdditivePatch) $ updatedIncremental q)
288289 return result
289290
291+-- | Maps a function over a 'QueryT' that can change the underlying monad
292+mapQueryT :: (forall b. m b -> n b) -> QueryT t q m a -> QueryT t q n a
293+mapQueryT f (QueryT a) = QueryT $ mapStateT (mapEventWriterT (mapReaderT f)) a
294+
290295-- | dynWithQueryT's (Dynamic t QueryMorphism) argument needs to be a group homomorphism at all times in order to behave correctly
291296dynWithQueryT :: (MonadFix m, PostBuild t m, Group q, Additive q, Group q', Additive q', Query q')
292297 => Dynamic t (QueryMorphism q q')