on develop help sign in
Split out Base and Class for DynamicWriter/EventWriter
commit1895c99ba06cdb9e06befb1628a8ec71a50c2c7f authorElliot Cameron <eacameron@gmail.com> dateTue 1 May 2018, 15:26 (8 years ago) parent9f3356f
9 files changed+70−35
reflex.cabal+4−2 src/Reflex.hs+4−2 src/Reflex/DynamicWriter.hs → src/Reflex/DynamicWriter/Base.hs+4−15 src/Reflex/DynamicWriter/Class.hs+24 src/Reflex/EventWriter.hs → src/Reflex/EventWriter/Base.hs+3−12 src/Reflex/EventWriter/Class.hs+26 src/Reflex/NotReady/Class.hs+2−2 src/Reflex/Query/Base.hs+2−1 test/EventWriterT.hs+1−1
reflex.cabal+4−2
@@ -87,10 +87,12 @@ library
8787 Reflex,
8888 Reflex.Class,
8989 Reflex.Collection,
90− Reflex.EventWriter,
90+ Reflex.EventWriter.Base,
91+ Reflex.EventWriter.Class,
9192 Reflex.Dynamic,
9293 Reflex.Dynamic.Uniq,
93− Reflex.DynamicWriter,
94+ Reflex.DynamicWriter.Base,
95+ Reflex.DynamicWriter.Class,
9496 Reflex.FastWeak,
9597 Reflex.FunctorMaybe,
9698 Reflex.Host.Class,
src/Reflex.hs+4−2
@@ -7,13 +7,15 @@ module Reflex
77
88import Reflex.Class as X
99import Reflex.Collection as X
10−import Reflex.EventWriter as X
10+import Reflex.EventWriter.Base as X
11+import Reflex.EventWriter.Class as X
1112import Reflex.Dynamic as X
1213#ifdef USE_TEMPLATE_HASKELL
1314import Reflex.Dynamic.TH as X
1415#endif
1516import Reflex.Dynamic.Uniq as X
16−import Reflex.DynamicWriter as X
17+import Reflex.DynamicWriter.Base as X
18+import Reflex.DynamicWriter.Class as X
1719import Reflex.PerformEvent.Base as X
1820import Reflex.PerformEvent.Class as X
1921import Reflex.PostBuild.Base as X
src/Reflex/DynamicWriter.hs → src/Reflex/DynamicWriter/Base.hsrenamed+4−15
@@ -1,8 +1,5 @@
1−-- | This module defines 'MonadDynamicWriter' and 'DynamicWriterT', its standard
2−-- implementation.
31{-# LANGUAGE CPP #-}
42{-# LANGUAGE FlexibleInstances #-}
5−{-# LANGUAGE FunctionalDependencies #-}
63{-# LANGUAGE GADTs #-}
74{-# LANGUAGE GeneralizedNewtypeDeriving #-}
85{-# LANGUAGE LambdaCase #-}
@@ -14,9 +11,8 @@
1411#ifdef USE_REFLEX_OPTIMIZER
1512{-# OPTIONS_GHC -fplugin=Reflex.Optimizer #-}
1613#endif
17−module Reflex.DynamicWriter
18− ( MonadDynamicWriter (..)
19− , DynamicWriterT (..)
14+module Reflex.DynamicWriter.Base
15+ ( DynamicWriterT (..)
2016 , runDynamicWriterT
2117 , withDynamicWriterT
2218 ) where
@@ -40,6 +36,7 @@ import Data.Semigroup
4036import Data.Some (Some)
4137import Data.These
4238import Reflex.Class
39+import Reflex.DynamicWriter.Class
4340import Reflex.Host.Class
4441import qualified Reflex.Patch.MapWithMove as MapWithMove
4542import Reflex.PerformEvent.Class
@@ -75,7 +72,7 @@ mergeDynIncrementalWithMove a = unsafeBuildIncremental (mapM (sample . current)
7572 These p_ c -> (unPatchMapWithMove p_, c)
7673 (pWithNewVals, noLongerMoved) = flip runState [] $ forM p $ MapWithMove.nodeInfoMapMFrom $ \case
7774 MapWithMove.From_Insert v -> return $ MapWithMove.From_Insert v
78− MapWithMove.From_Delete -> return $ MapWithMove.From_Delete
75+ MapWithMove.From_Delete -> return MapWithMove.From_Delete
7976 MapWithMove.From_Move k -> case Map.lookup k changed of
8077 Nothing -> return $ MapWithMove.From_Move k
8178 Just v -> do
@@ -107,11 +104,6 @@ runDynamicWriterT (DynamicWriterT a) = do
107104 (result, ws) <- runStateT a []
108105 return (result, mconcat $ reverse ws)
109106
110−-- | 'MonadDynamicWriter' efficiently collects 'Dynamic' values using 'tellDyn'
111−-- and combines them monoidally to provide a 'Dynamic' result.
112−class (Monad m, Monoid w) => MonadDynamicWriter t w m | m -> t w where
113− tellDyn :: Dynamic t w -> m ()
114−
115107instance (Monad m, Monoid w, Reflex t) => MonadDynamicWriter t w (DynamicWriterT t w m) where
116108 tellDyn w = DynamicWriterT $ modify (w :)
117109
@@ -133,9 +125,6 @@ instance TriggerEvent t m => TriggerEvent t (DynamicWriterT t w m) where
133125instance PostBuild t m => PostBuild t (DynamicWriterT t w m) where
134126 getPostBuild = lift getPostBuild
135127
136−instance MonadDynamicWriter t w m => MonadDynamicWriter t w (ReaderT r m) where
137− tellDyn = lift . tellDyn
138−
139128instance MonadState s m => MonadState s (DynamicWriterT t w m) where
140129 get = lift get
141130 put = lift . put
src/Reflex/DynamicWriter/Class.hsnew file+24
@@ -0,0 +1,24 @@
1+-- | This module defines the 'MonadDynamicWriter' class.
2+{-# LANGUAGE CPP #-}
3+{-# LANGUAGE FlexibleInstances #-}
4+{-# LANGUAGE FunctionalDependencies #-}
5+{-# LANGUAGE MultiParamTypeClasses #-}
6+{-# LANGUAGE UndecidableInstances #-}
7+#ifdef USE_REFLEX_OPTIMIZER
8+{-# OPTIONS_GHC -fplugin=Reflex.Optimizer #-}
9+#endif
10+module Reflex.DynamicWriter.Class
11+ ( MonadDynamicWriter (..)
12+ ) where
13+
14+import Control.Monad.Reader (ReaderT, lift)
15+import Reflex.Class (Dynamic)
16+
17+-- | 'MonadDynamicWriter' efficiently collects 'Dynamic' values using 'tellDyn'
18+-- and combines them monoidally to provide a 'Dynamic' result.
19+class (Monad m, Monoid w) => MonadDynamicWriter t w m | m -> t w where
20+ tellDyn :: Dynamic t w -> m ()
21+
22+instance MonadDynamicWriter t w m => MonadDynamicWriter t w (ReaderT r m) where
23+ tellDyn = lift . tellDyn
24+
src/Reflex/EventWriter.hs → src/Reflex/EventWriter/Base.hsrenamed+3−12
@@ -3,7 +3,6 @@
33{-# LANGUAGE CPP #-}
44{-# LANGUAGE ExistentialQuantification #-}
55{-# LANGUAGE FlexibleInstances #-}
6−{-# LANGUAGE FunctionalDependencies #-}
76{-# LANGUAGE GeneralizedNewtypeDeriving #-}
87{-# LANGUAGE MultiParamTypeClasses #-}
98{-# LANGUAGE Rank2Types #-}
@@ -14,16 +13,16 @@
1413#ifdef USE_REFLEX_OPTIMIZER
1514{-# OPTIONS_GHC -fplugin=Reflex.Optimizer #-}
1615#endif
17−module Reflex.EventWriter
16+module Reflex.EventWriter.Base
1817 ( EventWriterT (..)
1918 , runEventWriterT
20− , EventWriter (..)
2119 , runWithReplaceEventWriterTWith
2220 , sequenceDMapWithAdjustEventWriterTWith
2321 , withEventWriterT
2422 ) where
2523
2624import Reflex.Class
25+import Reflex.EventWriter.Class (EventWriter, tellEvent)
2726import Reflex.Host.Class
2827import Reflex.PerformEvent.Class
2928import Reflex.PostBuild.Class
@@ -41,7 +40,7 @@ import qualified Data.Dependent.Map as DMap
4140import Data.Foldable
4241import Data.Functor.Compose
4342import Data.Functor.Misc
44−import Data.GADT.Compare (GEq (..), GCompare (..), GOrdering (..))
43+import Data.GADT.Compare (GCompare (..), GEq (..), GOrdering (..))
4544import Data.IntMap.Strict (IntMap)
4645import qualified Data.IntMap.Strict as IntMap
4746import Data.List.NonEmpty (NonEmpty (..))
@@ -53,11 +52,6 @@ import Data.Type.Equality
5352
5453import Unsafe.Coerce
5554
56−-- | 'EventWriter' efficiently collects 'Event' values using 'tellEvent'
57−-- and combines them monoidally to provide an 'Event' result.
58−class (Monad m, Semigroup w) => EventWriter t w m | m -> t w where
59− tellEvent :: Event t w -> m ()
60−
6155{-# DEPRECATED TellId "Do not construct this directly; use tellId instead" #-}
6256newtype TellId w x
6357 = TellId Int -- ^ WARNING: Do not construct this directly; use 'TellId' instead
@@ -118,9 +112,6 @@ instance (Reflex t, Monad m, Semigroup w) => EventWriter t w (EventWriterT t w m
118112 , _eventWriterState_told = (tellId myId :=> w) : _eventWriterState_told old
119113 }
120114
121−instance EventWriter t w m => EventWriter t w (ReaderT r m) where
122− tellEvent = lift . tellEvent
123−
124115instance MonadTrans (EventWriterT t w) where
125116 lift = EventWriterT . lift
126117
src/Reflex/EventWriter/Class.hsnew file+26
@@ -0,0 +1,26 @@
1+-- | This module defines the 'EventWriter' class.
2+{-# LANGUAGE CPP #-}
3+{-# LANGUAGE FlexibleInstances #-}
4+{-# LANGUAGE FunctionalDependencies #-}
5+{-# LANGUAGE UndecidableInstances #-}
6+#ifdef USE_REFLEX_OPTIMIZER
7+{-# OPTIONS_GHC -fplugin=Reflex.Optimizer #-}
8+#endif
9+module Reflex.EventWriter.Class
10+ ( EventWriter (..)
11+ ) where
12+
13+import Control.Monad.Reader (ReaderT, lift)
14+import Data.Semigroup (Semigroup)
15+
16+import Reflex.Class (Event)
17+
18+
19+-- | 'EventWriter' efficiently collects 'Event' values using 'tellEvent'
20+-- and combines them via 'Semigroup' to provide an 'Event' result.
21+class (Monad m, Semigroup w) => EventWriter t w m | m -> t w where
22+ tellEvent :: Event t w -> m ()
23+
24+
25+instance EventWriter t w m => EventWriter t w (ReaderT r m) where
26+ tellEvent = lift . tellEvent
src/Reflex/NotReady/Class.hs+2−2
@@ -18,8 +18,8 @@ import Control.Monad.Reader (ReaderT)
1818import Reflex.Class
1919import Reflex.Host.Class
2020import Reflex.PostBuild.Base (PostBuildT)
21−import Reflex.EventWriter (EventWriterT)
22−import Reflex.DynamicWriter (DynamicWriterT)
21+import Reflex.EventWriter.Base (EventWriterT)
22+import Reflex.DynamicWriter.Base (DynamicWriterT)
2323import Reflex.Query.Base (QueryT)
2424import Reflex.Requester.Base (RequesterT)
2525import Reflex.PerformEvent.Base (PerformEventT(..))
src/Reflex/Query/Base.hs+2−1
@@ -37,7 +37,8 @@ import qualified Data.Some as Some
3737import Data.These
3838
3939import Reflex.Class
40−import Reflex.EventWriter
40+import Reflex.EventWriter.Class
41+import Reflex.EventWriter.Base
4142import Reflex.Host.Class
4243import Reflex.PerformEvent.Class
4344import Reflex.PostBuild.Class
test/EventWriterT.hs+1−1
@@ -6,7 +6,7 @@ import Control.Monad
66import Data.These
77
88import Reflex
9−import Reflex.EventWriter
9+import Reflex.EventWriter.Base
1010import Test.Run
1111
1212main :: IO ()