on develop help sign in
Move Adjustable to its own module, finishing off #121
commitb3d8ef9204caf26a0434df46f8539abd42b8d1cf authorJohn Ericson <John.Ericson@Obsidian.Systems> dateWed 18 Jul 2018, 15:33 (8 years ago) parent0b6ac99
15 files changed+27−57
reflex.cabal+1 src/Reflex.hs+1 src/Reflex/Adjustable/Class.hs+12−6 src/Reflex/Class.hs−51 src/Reflex/Collection.hs+1 src/Reflex/DynamicWriter/Base.hs+2 src/Reflex/EventWriter/Base.hs+1 src/Reflex/Network.hs+1 src/Reflex/PerformEvent/Base.hs+1 src/Reflex/PostBuild/Base.hs+1 src/Reflex/Query/Base.hs+1 src/Reflex/Requester/Base.hs+1 src/Reflex/TriggerEvent/Base.hs+1 src/Reflex/Widget/Basic.hs+2 src/Reflex/Workflow.hs+1
reflex.cabal+1
@@ -72,6 +72,7 @@ library
7272 Data.WeakBag,
7373 Reflex,
7474 Reflex.Class,
75+ Reflex.Adjustable.Class,
7576 Reflex.Collection,
7677 Reflex.Dynamic,
7778 Reflex.Dynamic.Uniq,
src/Reflex.hs+1
@@ -6,6 +6,7 @@ module Reflex
66 ) where
77
88import Reflex.Class as X
9+import Reflex.Adjustable.Class as X
910import Reflex.Collection as X
1011import Reflex.Dynamic as X
1112import Reflex.EventWriter.Base as X
src/Reflex/Adjustable/Class.hs+12−6
@@ -1,4 +1,5 @@
11{-# LANGUAGE CPP #-}
2+{-# LANGUAGE ConstraintKinds #-}
23{-# LANGUAGE FlexibleInstances #-}
34{-# LANGUAGE FunctionalDependencies #-}
45{-# LANGUAGE MultiParamTypeClasses #-}
@@ -16,22 +17,20 @@ module Reflex.Adjustable.Class
1617 , sequenceDMapWithAdjust
1718 , sequenceDMapWithAdjustWithMove
1819 , mapMapWithAdjustWithMove
20+ -- * Deprecated aliases
21+ , MonadAdjust
1922 ) where
2023
2124import Control.Monad.Identity
2225import Control.Monad.Reader
23−import Data.Align
2426import Data.Dependent.Map (DMap, GCompare (..))
2527import Data.Functor.Constant
2628import Data.Functor.Misc
29+import Data.IntMap.Strict (IntMap)
30+import qualified Data.IntMap.Strict as IntMap
2731import Data.Map (Map)
28−import qualified Data.Map as Map
29−import Data.Map.Misc
30−import Data.These
3132
3233import Reflex.Class
33−import Reflex.Dynamic
34−import Reflex.PostBuild.Class
3534
3635-- | A 'Monad' that supports adjustment over time. After an action has been
3736-- run, if the given events fire, it will adjust itself so that its net effect
@@ -69,3 +68,10 @@ mapMapWithAdjustWithMove :: forall t m k v v'. (Adjustable t m, Ord k) => (k ->
6968mapMapWithAdjustWithMove f m0 m' = do
7069 (out0 :: DMap (Const2 k v) (Constant v'), out') <- traverseDMapWithKeyWithAdjustWithMove (\(Const2 k) (Identity v) -> Constant <$> f k v) (mapToDMap m0) (const2PatchDMapWithMoveWith Identity <$> m')
7170 return (dmapToMapWith (\(Constant v') -> v') out0, patchDMapWithMoveToPatchMapWithMoveWith (\(Constant v') -> v') <$> out')
71+
72+--------------------------------------------------------------------------------
73+-- Deprecated functions
74+--------------------------------------------------------------------------------
75+
76+{-# DEPRECATED MonadAdjust "Use Adjustable instead" #-}
77+type MonadAdjust = Adjustable
src/Reflex/Class.hs−51
@@ -120,15 +120,9 @@ module Reflex.Class
120120 , ffilter
121121 , filterLeft
122122 , filterRight
123− -- * 'Adjustable'
124− , Adjustable(..)
125− , sequenceDMapWithAdjust
126− , sequenceDMapWithAdjustWithMove
127− , mapMapWithAdjustWithMove
128123 -- * Miscellaneous convenience functions
129124 , ffor
130125 -- * Deprecated functions
131− , MonadAdjust
132126 , appendEvents
133127 , onceE
134128 , sequenceThese
@@ -163,7 +157,6 @@ import qualified Data.Dependent.Map as DMap
163157import Data.FastMutableIntMap (PatchIntMap)
164158import Data.Foldable
165159import Data.Functor.Bind
166−import Data.Functor.Constant
167160import Data.Functor.Misc
168161import Data.Functor.Plus
169162import Data.IntMap.Strict (IntMap)
@@ -1062,47 +1055,6 @@ infixl 4 <@>
10621055(<@) = tag
10631056infixl 4 <@
10641057
1065−------------------
1066−-- Adjustable
1067−------------------
1068−
1069−-- | A 'Monad' that supports adjustment over time. After an action has been
1070−-- run, if the given events fire, it will adjust itself so that its net effect
1071−-- is as though it had originally been run with the new value. Note that there
1072−-- is some issue here with persistent side-effects: obviously, IO (and some
1073−-- other side-effects) cannot be undone, so it is up to the instance implementer
1074−-- to determine what the best meaning for this class is in such cases.
1075−class (Reflex t, Monad m) => Adjustable t m | m -> t where
1076− runWithReplace :: m a -> Event t (m b) -> m (a, Event t b)
1077− traverseIntMapWithKeyWithAdjust :: (IntMap.Key -> v -> m v') -> IntMap v -> Event t (PatchIntMap v) -> m (IntMap v', Event t (PatchIntMap v'))
1078− traverseDMapWithKeyWithAdjust :: GCompare k => (forall a. k a -> v a -> m (v' a)) -> DMap k v -> Event t (PatchDMap k v) -> m (DMap k v', Event t (PatchDMap k v'))
1079− traverseDMapWithKeyWithAdjustWithMove :: GCompare k => (forall a. k a -> v a -> m (v' a)) -> DMap k v -> Event t (PatchDMapWithMove k v) -> m (DMap k v', Event t (PatchDMapWithMove k v'))
1080−
1081−instance Adjustable t m => Adjustable t (ReaderT r m) where
1082− runWithReplace a0 a' = do
1083− r <- ask
1084− lift $ runWithReplace (runReaderT a0 r) $ fmap (`runReaderT` r) a'
1085− traverseIntMapWithKeyWithAdjust f dm0 dm' = do
1086− r <- ask
1087− lift $ traverseIntMapWithKeyWithAdjust (\k v -> runReaderT (f k v) r) dm0 dm'
1088− traverseDMapWithKeyWithAdjust f dm0 dm' = do
1089− r <- ask
1090− lift $ traverseDMapWithKeyWithAdjust (\k v -> runReaderT (f k v) r) dm0 dm'
1091− traverseDMapWithKeyWithAdjustWithMove f dm0 dm' = do
1092− r <- ask
1093− lift $ traverseDMapWithKeyWithAdjustWithMove (\k v -> runReaderT (f k v) r) dm0 dm'
1094−
1095−sequenceDMapWithAdjust :: (GCompare k, Adjustable t m) => DMap k m -> Event t (PatchDMap k m) -> m (DMap k Identity, Event t (PatchDMap k Identity))
1096−sequenceDMapWithAdjust = traverseDMapWithKeyWithAdjust $ \_ -> fmap Identity
1097−
1098−sequenceDMapWithAdjustWithMove :: (GCompare k, Adjustable t m) => DMap k m -> Event t (PatchDMapWithMove k m) -> m (DMap k Identity, Event t (PatchDMapWithMove k Identity))
1099−sequenceDMapWithAdjustWithMove = traverseDMapWithKeyWithAdjustWithMove $ \_ -> fmap Identity
1100−
1101−mapMapWithAdjustWithMove :: forall t m k v v'. (Adjustable t m, Ord k) => (k -> v -> m v') -> Map k v -> Event t (PatchMapWithMove k v) -> m (Map k v', Event t (PatchMapWithMove k v'))
1102−mapMapWithAdjustWithMove f m0 m' = do
1103− (out0 :: DMap (Const2 k v) (Constant v'), out') <- traverseDMapWithKeyWithAdjustWithMove (\(Const2 k) (Identity v) -> Constant <$> f k v) (mapToDMap m0) (const2PatchDMapWithMoveWith Identity <$> m')
1104− return (dmapToMapWith (\(Constant v') -> v') out0, patchDMapWithMoveToPatchMapWithMoveWith (\(Constant v') -> v') <$> out')
1105−
11061058------------------
11071059-- Cheap Functions
11081060------------------
@@ -1151,9 +1103,6 @@ mergeWithFoldCheap' f es =
11511103-- Deprecated functions
11521104--------------------------------------------------------------------------------
11531105
1154−{-# DEPRECATED MonadAdjust "Use Adjustable instead" #-}
1155−type MonadAdjust = Adjustable
1156−
11571106-- | Create a new 'Event' that occurs if at least one of the supplied 'Event's
11581107-- occurs. If both occur at the same time they are combined using 'mappend'.
11591108{-# DEPRECATED appendEvents "If a 'Semigroup a' instance is available, use 'mappend'; otherwise, use 'alignWith (mergeThese mappend)' instead" #-}
src/Reflex/Collection.hs+1
@@ -34,6 +34,7 @@ import Data.Map.Misc
3434import Data.These
3535
3636import Reflex.Class
37+import Reflex.Adjustable.Class
3738import Reflex.Dynamic
3839import Reflex.PostBuild.Class
3940
src/Reflex/DynamicWriter/Base.hs+2
@@ -36,7 +36,9 @@ import qualified Data.Map as Map
3636import Data.Semigroup
3737import Data.Some (Some)
3838import Data.These
39+
3940import Reflex.Class
41+import Reflex.Adjustable.Class
4042import Reflex.DynamicWriter.Class
4143import Reflex.Host.Class
4244import qualified Reflex.Patch.MapWithMove as MapWithMove
src/Reflex/EventWriter/Base.hs+1
@@ -23,6 +23,7 @@ module Reflex.EventWriter.Base
2323 ) where
2424
2525import Reflex.Class
26+import Reflex.Adjustable.Class
2627import Reflex.EventWriter.Class (EventWriter, tellEvent)
2728import Reflex.Host.Class
2829import Reflex.PerformEvent.Class
src/Reflex/Network.hs+1
@@ -10,6 +10,7 @@ module Reflex.Network
1010 ) where
1111
1212import Reflex.Class
13+import Reflex.Adjustable.Class
1314import Reflex.NotReady.Class
1415import Reflex.PostBuild.Class
1516
src/Reflex/PerformEvent/Base.hs+1
@@ -25,6 +25,7 @@ module Reflex.PerformEvent.Base
2525 ) where
2626
2727import Reflex.Class
28+import Reflex.Adjustable.Class
2829import Reflex.Host.Class
2930import Reflex.PerformEvent.Class
3031import Reflex.Requester.Base
src/Reflex/PostBuild/Base.hs+1
@@ -23,6 +23,7 @@ module Reflex.PostBuild.Base
2323 ) where
2424
2525import Reflex.Class
26+import Reflex.Adjustable.Class
2627import Reflex.Host.Class
2728import Reflex.PerformEvent.Class
2829import Reflex.PostBuild.Class
src/Reflex/Query/Base.hs+1
@@ -38,6 +38,7 @@ import qualified Data.Some as Some
3838import Data.These
3939
4040import Reflex.Class
41+import Reflex.Adjustable.Class
4142import Reflex.EventWriter.Base
4243import Reflex.EventWriter.Class
4344import Reflex.Host.Class
src/Reflex/Requester/Base.hs+1
@@ -32,6 +32,7 @@ module Reflex.Requester.Base
3232 ) where
3333
3434import Reflex.Class
35+import Reflex.Adjustable.Class
3536import Reflex.Dynamic
3637import Reflex.Host.Class
3738import Reflex.PerformEvent.Class
src/Reflex/TriggerEvent/Base.hs+1
@@ -25,6 +25,7 @@ import Data.IORef
2525import Data.Monoid ((<>))
2626import qualified Data.Semigroup as S
2727import Reflex.Class
28+import Reflex.Adjustable.Class
2829import Reflex.Host.Class
2930import Reflex.PerformEvent.Class
3031import Reflex.PostBuild.Class
src/Reflex/Widget/Basic.hs+2
@@ -10,7 +10,9 @@ module Reflex.Widget.Basic where
1010
1111import Control.Monad.Fix (MonadFix)
1212import Data.Map (Map)
13+
1314import Reflex.Class
15+import Reflex.Adjustable.Class
1416import Reflex.Patch.MapWithMove
1517
1618
src/Reflex/Workflow.hs+1
@@ -13,6 +13,7 @@ import Control.Arrow ((***))
1313import Control.Monad.Fix (MonadFix)
1414
1515import Reflex.Class
16+import Reflex.Adjustable.Class
1617import Reflex.Network
1718import Reflex.NotReady.Class
1819import Reflex.PostBuild.Class