on develop help sign in
Merge branch 'develop' into extra-query-instances
commit2dcfb122a9e1303704a6c73017350384775339b7 authorleon.smith@obsidian.systems <leon.smith@obsidian.systems> dateWed 8 Jan 2020, 10:39 (7 years ago) parent2a0499cfd38931
18 files changed+69−49
.travis.yml+3−1 ChangeLog.md+8−9 Quickref.md+14−11 cabal.haskell-ci+1 dep/reflex-platform/github.json+3−3 reflex.cabal+7−8 release.nix+3 src/Control/Monad/ReaderIO.hs+1−1 src/Data/AppendMap.hs+1−1 src/Data/Functor/Misc.hs+1 src/Reflex/Class.hs+6−2 src/Reflex/Collection.hs+1−1 src/Reflex/Dynamic.hs+2−1 src/Reflex/DynamicWriter/Class.hs−1 src/Reflex/PerformEvent/Base.hs+1−1 src/Reflex/Spider/Internal.hs+16−1 test/Reflex/Bench/Focused.hs+1−1 test/hlint.hs−7
.travis.yml+3−1
@@ -29,6 +29,8 @@ matrix:
2929 include:
3030 - compiler: ghcjs-8.4
3131 addons: {"apt":{"sources":["hvr-ghc"],"packages":["cabal-install-3.0"]}}
32+ - compiler: ghc-8.8.1
33+ addons: {"apt":{"sources":["hvr-ghc"],"packages":["ghc-8.8.1","cabal-install-3.0"]}}
3234 - compiler: ghc-8.6.5
3335 addons: {"apt":{"sources":["hvr-ghc"],"packages":["ghc-8.6.5","cabal-install-2.4"]}}
3436 - compiler: ghc-8.4.4
@@ -163,7 +165,7 @@ script:
163165 # Constraint set no-th
164166 - ${CABAL} v2-build $WITHCOMPILER --disable-tests --disable-benchmarks --constraint='reflex -use-template-haskell' all | color_cabal_output
165167 # Constraint set old-these
166− - ${CABAL} v2-build $WITHCOMPILER --disable-tests --disable-benchmarks --constraint='these <1' all | color_cabal_output
168+ - if $GHCJS || ! $GHCJS && [ $HCNUMVER -lt 80800 ] ; then ${CABAL} v2-build $WITHCOMPILER --disable-tests --disable-benchmarks --constraint='these <1' all | color_cabal_output ; fi
167169 # Constraint set old-witherable
168170 - ${CABAL} v2-build $WITHCOMPILER --disable-tests --disable-benchmarks --constraint='witherable <0.3.2' all | color_cabal_output
169171
ChangeLog.md+8−9
@@ -1,11 +1,10 @@
11# Revision history for reflex
22
3−## Unreleased
3+## 0.6.3
4+
5+* `Data.WeakBag.traverse` and `Data.FastWeakBag.traverse` have been deprecated.
6+ They are replaced with `Data.WeakBag.traverse_` and `Data.FastWeakBag.traverse_`, respectively.
47
5−* Data.WeakBag.traverse and Data.FastWeakBag.traverse have been
6− renamed to Data.WeakBag.traverse_ and Data.FastWeakBag.traverse_
7− respectively.
8−
98* Fixes a bug in `Reflex.Patch.MapWithMove.patchThatSortsMapWith` that was producing invalid `PatchMapWithMove`.
109
1110* Add missing `NotReady` instances:
@@ -42,16 +41,16 @@
4241 * Add incrementalCoercion/coerceIncremental to go with dynamicCoercion/coerceDynamic
4342
4443* Generalize merging functions:
45− `merge` to `mergeG`,
46− `mergeIncremental` to `mergeIncrementalG`,
47− `mergeIncrementalWithMove` to `mergeIncrementalWithMoveG`.
44+ `merge` to `mergeG`,
45+ `mergeIncremental` to `mergeIncrementalG`,
46+ `mergeIncrementalWithMove` to `mergeIncrementalWithMoveG`.
4847
4948* Generalize distribute function:
5049 `distributeDMapOverDynPure` to `distributeDMapOverDynPureG`,
5150
5251## 0.6.2.0
5352
54−* Fix `holdDyn` so that it is lazy in its event argument
53+* Fix `holdDyn` so that it is lazy in its event argument
5554 These produce `DMap`s whose values needn't be `Identity`.
5655
5756* Stop using the now-deprecated `*Tag` classes (e.g., `ShowTag`).
Quickref.md+14−11
@@ -198,7 +198,7 @@ For Events, the returned Event fires whenever the latest Event supplied by the w
198198The functions mentioned above are used to create a static FRP network.
199199There are additional typeclasses that can be used to modify the FRP network, to have it interact with IO action, or to introspect the building of the network.
200200
201−Th typeclasses and their associated annotations include:
201+The typeclasses and their associated annotations include:
202202
203203- `PostBuild`
204204 Fire an Event when an FRP network has been set up.
@@ -206,7 +206,7 @@ Th typeclasses and their associated annotations include:
206206 [B] -- Function runs in any monad supporting PostBuild
207207 ```
208208
209−- `Adjustable`
209+- `Adjustable`
210210 Use Events to add or remove pieces of an FRP network.
211211 ```haskell
212212 [A] -- Function runs in any monad supporting Adjustable
@@ -271,7 +271,7 @@ Th typeclasses and their associated annotations include:
271271```haskell
272272-- Run side-effecting actions in Event when it occurs; returned Event contains
273273-- results. Side effects run in the (Performable m) monad which is associated with
274−-- the (PerformEvent t m) typeclass constraint.
274+-- the (PerformEvent t m) typeclass constraint.
275275-- This allows for working with IO when a ((MonadIO (Performable m)) constraint is available.
276276[P] performEvent :: Event (Performable m a ) -> m (Event a)
277277
@@ -295,17 +295,20 @@ Th typeclasses and their associated annotations include:
295295## Networks
296296
297297```haskell
298−-- Functions from Reflex.Network used to deal with Dynamics/Events carrying (m a)
298+-- Functions from Reflex.Adjustable / Reflex.Network used to deal with Dynamics/Events carrying (m a)
299299
300−-- Given a Dynamic of network-creating actions, create a network that is recreated whenever the Dynamic updates.
301−-- The returned Event of network results occurs when the Dynamic does. Note: Often, the type a is an Event,
300+[A] runWithReplace :: m a -> Event t (m b) -> m (a, Event t b)
301+
302+-- Given a Dynamic of network-creating actions, create a network that is recreated whenever the Dynamic updates.
303+-- The returned Event of network results occurs when the Dynamic does. Note: Often, the type a is an Event,
302304-- in which case the return value is an Event-of-Events that would typically be flattened (via switchHold).
303−[P,A] networkView :: Dynamic (m a) -> m (Event a)
305+[P,A] networkView :: Dynamic (m a) -> m (Event a)
304306
305−-- Given an initial network and an Event of network-creating actions, create a network that is recreated whenever the
306−-- Event fires. The returned Dynamic of network results occurs when the Event does. Note: Often, the type a is an
307+-- Given an initial network and an Event of network-creating actions, create a network that is recreated whenever the
308+-- Event fires. The returned Dynamic of network results occurs when the Event does. Note: Often, the type a is an
307309-- Event, in which case the return value is a Dynamic-of-Events that would typically be flattened.
308−[H,A] networkHold :: m a -> Event (m a) -> m (Dynamic a)
310+[H,A] networkHold :: m a -> Event (m a) -> m (Dynamic a)
309311
310312-- Render a placeholder network to be shown while another network is not yet done building
311−[P,A] untilReady :: m a -> m b -> m (a, Event b)
313+[P,A] untilReady :: m a -> m b -> m (a, Event b)
314+```
cabal.haskell-ci+1
@@ -10,6 +10,7 @@ constraint-set no-th
1010 constraints: reflex -use-template-haskell
1111
1212constraint-set old-these
13+ ghc: <8.8
1314 constraints: these <1
1415
1516constraint-set old-witherable
dep/reflex-platform/github.json+3−3
@@ -1,7 +1,7 @@
11{
22 "owner": "reflex-frp",
33 "repo": "reflex-platform",
4− "branch": "develop",
5− "rev": "e7b76dd552a10916c7d8702c11292dac4f4299ea",
6− "sha256": "0s1183arrwldcs50qhzgnv94v24n9bgq6dfq64wp0a3q2nzyvgwh"
4+ "branch": "master",
5+ "rev": "510b990d0b11f0626afbec5fe8575b5b2395391b",
6+ "sha256": "09cmahsbxr0963wq171c7j139iyzz49hramr4v9nsf684wcwkngv"
77}
reflex.cabal+7−8
@@ -1,5 +1,5 @@
11Name: reflex
2−Version: 0.6.2.4
2+Version: 0.6.3
33Synopsis: Higher-order Functional Reactive Programming
44Description: Reflex is a high-performance, deterministic, higher-order Functional Reactive Programming system
55License: BSD3
@@ -18,7 +18,7 @@ extra-source-files:
1818 ChangeLog.md
1919
2020tested-with:
21− GHC ==8.0.2 || ==8.2.2 || ==8.4.4 || ==8.6.5,
21+ GHC ==8.0.2 || ==8.2.2 || ==8.4.4 || ==8.6.5 || ==8.8.1,
2222 GHCJS ==8.4
2323
2424flag use-reflex-optimizer
@@ -50,7 +50,7 @@ library
5050 hs-source-dirs: src
5151 build-depends:
5252 MemoTrie == 0.6.*,
53− base >= 4.9 && < 4.13,
53+ base >= 4.9 && < 4.14,
5454 bifunctors >= 5.2 && < 5.6,
5555 comonad >= 5.0.4 && < 5.1,
5656 constraints-extras >= 0.3 && < 0.4,
@@ -58,20 +58,19 @@ library
5858 data-default >= 0.5 && < 0.8,
5959 dependent-map >= 0.3 && < 0.4,
6060 exception-transformers == 0.4.*,
61− profunctors >= 5.3 && < 5.5,
6261 lens >= 4.7 && < 5,
6362 monad-control >= 1.0.1 && < 1.1,
6463 mtl >= 2.1 && < 2.3,
6564 prim-uniq >= 0.1.0.1 && < 0.2,
6665 primitive >= 0.5 && < 0.8,
67− profunctors,
66+ profunctors >= 5.3 && < 5.6,
6867 random == 1.1.*,
6968 ref-tf == 0.4.*,
7069 reflection == 2.1.*,
7170 semigroupoids >= 4.0 && < 6,
7271 stm >= 2.4 && < 2.6,
7372 syb >= 0.5 && < 0.8,
74− time >= 1.4 && < 1.9,
73+ time >= 1.4 && < 1.10,
7574 transformers >= 0.5.6.0 && < 0.6,
7675 unbounded-delays >= 0.1.0.0 && < 0.2,
7776 witherable >= 0.3 && < 0.3.2
@@ -151,9 +150,9 @@ library
151150 cpp-options: -DUSE_TEMPLATE_HASKELL
152151 build-depends:
153152 dependent-sum >= 0.6 && < 0.7,
154− haskell-src-exts >= 1.16 && < 1.22,
153+ haskell-src-exts >= 1.16 && < 1.23,
155154 haskell-src-meta >= 0.6 && < 0.9,
156− template-haskell >= 2.9 && < 2.15
155+ template-haskell >= 2.9 && < 2.16
157156 exposed-modules:
158157 Reflex.Dynamic.TH
159158 other-extensions: TemplateHaskell
release.nix+3
@@ -34,6 +34,9 @@ let
3434 "release.nix"
3535 ".git"
3636 "dist"
37+ "cabal.haskell-ci"
38+ "cabal.project"
39+ ".travis.yml"
3740 ])) ./.;
3841 };
3942 })
src/Control/Monad/ReaderIO.hs+1−1
@@ -37,7 +37,7 @@ instance Applicative (ReaderIO e) where
3737#if MIN_VERSION_base(4,10,0)
3838 liftA2 = liftM2
3939 {-# INLINE liftA2 #-}
40−#endif
40+#endif
4141 (*>) = (>>)
4242 {-# INLINE (*>) #-}
4343
src/Data/AppendMap.hs+1−1
@@ -20,7 +20,7 @@ module Data.AppendMap
2020 , module Data.Map.Monoidal
2121 ) where
2222
23−import Prelude hiding (map, null)
23+import Prelude hiding (null)
2424
2525import Data.Coerce
2626import Data.Default
src/Data/Functor/Misc.hs+1
@@ -53,6 +53,7 @@ import Data.Map (Map)
5353import qualified Data.Map as Map
5454import Data.Some (Some(Some))
5555import Data.These
56+import Data.Type.Equality ((:~:)(Refl))
5657import Data.Typeable hiding (Refl)
5758
5859--------------------------------------------------------------------------------
src/Reflex/Class.hs+6−2
@@ -200,7 +200,7 @@ import Data.Dependent.Map (DMap, DSum (..))
200200import qualified Data.Dependent.Map as DMap
201201import Data.Functor.Compose
202202import Data.Functor.Product
203−import Data.GADT.Compare (GEq (..), GCompare (..), (:~:) (..))
203+import Data.GADT.Compare (GEq (..), GCompare (..))
204204import Data.FastMutableIntMap (PatchIntMap)
205205import Data.Foldable
206206import Data.Functor.Bind
@@ -215,6 +215,7 @@ import Data.Some (Some(Some))
215215import Data.String
216216import Data.These
217217import Data.Type.Coercion
218+import Data.Type.Equality ((:~:) (..))
218219import Data.Witherable (Filterable(..))
219220import qualified Data.Witherable as W
220221import Reflex.FunctorMaybe (FunctorMaybe)
@@ -286,7 +287,8 @@ class ( MonadHold t (PushM t)
286287 -- | Create an 'Event' that will occur whenever the currently-selected input
287288 -- 'Event' occurs
288289 switch :: Behavior t (Event t a) -> Event t a
289− -- | Create an 'Event' that will occur whenever the input event is occurring -- and its occurrence value, another 'Event', is also occurring
290+ -- | Create an 'Event' that will occur whenever the input event is occurring -- and its occurrence value, another 'Event', is also occurring.
291+ -- You maybe looking for '@switchHold@ @never@' instead.
290292 coincidence :: Event t (Event t a) -> Event t a
291293 -- | Extract the 'Behavior' of a 'Dynamic'.
292294 current :: Dynamic t a -> Behavior t a
@@ -662,7 +664,9 @@ instance Reflex t => Monad (Behavior t) where
662664 a >>= f = pull $ sample a >>= sample . f
663665 -- Note: it is tempting to write (_ >> b = b); however, this would result in (fail x >> return y) succeeding (returning y), which violates the law that (a >> b = a >>= \_ -> b), since the implementation of (>>=) above actually will fail. Since we can't examine 'Behavior's other than by using sample, I don't think it's possible to write (>>) to be more efficient than the (>>=) above.
664666 return = constant
667+#if !MIN_VERSION_base(4,13,0)
665668 fail = error "Monad (Behavior t) does not support fail"
669+#endif
666670
667671instance (Reflex t, Monoid a) => Monoid (Behavior t a) where
668672 mempty = constant mempty
src/Reflex/Collection.hs+1−1
@@ -130,7 +130,7 @@ listWithKeyShallowDiff initialVals valsChanged mkChild = do
130130 Nothing -> Just Nothing
131131
132132 -- We don't want to let spurious re-creations of items through
133− Just _ -> Nothing
133+ Just _ -> Nothing
134134 listHoldWithKey
135135 initialVals
136136 (attachWith (flip (Map.differenceWith relevantPatch))
src/Reflex/Dynamic.hs+2−1
@@ -87,11 +87,12 @@ import Data.Align
8787import Data.Dependent.Map (DMap)
8888import qualified Data.Dependent.Map as DMap
8989import Data.Dependent.Sum (DSum (..))
90−import Data.GADT.Compare ((:~:) (..), GCompare (..), GEq (..), GOrdering (..))
90+import Data.GADT.Compare (GCompare (..), GEq (..), GOrdering (..))
9191import Data.Map (Map)
9292import Data.Maybe
9393import Data.Monoid ((<>))
9494import Data.These
95+import Data.Type.Equality ((:~:) (..))
9596
9697import Debug.Trace
9798
src/Reflex/DynamicWriter/Class.hs−1
@@ -26,4 +26,3 @@ class (Monad m, Monoid w) => DynamicWriter t w m | m -> t w where
2626
2727instance DynamicWriter t w m => DynamicWriter t w (ReaderT r m) where
2828 tellDyn = lift . tellDyn
29−
src/Reflex/PerformEvent/Base.hs+1−1
@@ -141,7 +141,7 @@ hostPerformEventT a = do
141141 case mToPerform of
142142 Nothing -> return [result']
143143 Just toPerform -> do
144− responses <- runHostFrame $ traverseRequesterData (Identity <$>) toPerform
144+ responses <- runHostFrame $ traverseRequesterData (fmap Identity) toPerform
145145 mrt <- readRef responseTrigger
146146 let followupEventTriggers = case mrt of
147147 Just rt -> [rt :=> Identity responses]
src/Reflex/Spider/Internal.hs+16−1
@@ -43,6 +43,8 @@ import Control.Monad.Reader.Class
4343import Control.Monad.IO.Class
4444import Control.Monad.ReaderIO
4545import Control.Monad.Ref
46+import Control.Monad.Fail (MonadFail)
47+import qualified Control.Monad.Fail as MonadFail
4648import Data.Align
4749import Data.Coerce
4850import Data.Dependent.Map (DMap, DSum (..))
@@ -63,6 +65,7 @@ import Data.Monoid ((<>))
6365import Data.Proxy
6466import Data.These
6567import Data.Traversable
68+import Data.Type.Equality ((:~:)(Refl))
6669import Data.Witherable (Filterable, mapMaybe)
6770import GHC.Exts
6871import GHC.IORef (IORef (..))
@@ -972,8 +975,10 @@ instance Monad (BehaviorM x) where
972975 BehaviorM x >> BehaviorM y = BehaviorM $ x >> y
973976 {-# INLINE return #-}
974977 return x = BehaviorM $ return x
978+#if !MIN_VERSION_base(4,13,0)
975979 {-# INLINE fail #-}
976980 fail s = BehaviorM $ fail s
981+#endif
977982
978983data BehaviorSubscribed x a
979984 = forall p. BehaviorSubscribedHold (Hold x p)
@@ -2357,8 +2362,10 @@ instance HasSpiderTimeline x => Monad (Reflex.Class.Dynamic (SpiderTimeline x))
23572362 x >>= f = SpiderDynamic $ dynamicDynIdentity $ newJoinDyn $ newMapDyn (unSpiderDynamic . f) $ unSpiderDynamic x
23582363 {-# INLINE (>>) #-}
23592364 (>>) = (*>)
2365+#if !MIN_VERSION_base(4,13,0)
23602366 {-# INLINE fail #-}
23612367 fail _ = error "Dynamic does not support 'fail'"
2368+#endif
23622369
23632370{-# INLINABLE newJoinDyn #-}
23642371newJoinDyn :: HasSpiderTimeline x => DynamicS x (Identity (DynamicS x (Identity a))) -> Reflex.Spider.Internal.Dyn x (Identity a)
@@ -2637,8 +2644,14 @@ instance Monad (SpiderHost x) where
26372644 SpiderHost x >> SpiderHost y = SpiderHost $ x >> y
26382645 {-# INLINABLE return #-}
26392646 return x = SpiderHost $ return x
2647+#if !MIN_VERSION_base(4,13,0)
2648+ {-# INLINABLE fail #-}
2649+ fail = MonadFail.fail
2650+#endif
2651+
2652+instance MonadFail (SpiderHost x) where
26402653 {-# INLINABLE fail #-}
2641− fail s = SpiderHost $ fail s
2654+ fail s = SpiderHost $ MonadFail.fail s
26422655
26432656-- | Run an action affecting the global Spider timeline; this will be guarded by
26442657-- a mutex for that timeline
@@ -2660,8 +2673,10 @@ instance Monad (SpiderHostFrame x) where
26602673 SpiderHostFrame x >> SpiderHostFrame y = SpiderHostFrame $ x >> y
26612674 {-# INLINABLE return #-}
26622675 return x = SpiderHostFrame $ return x
2676+#if !MIN_VERSION_base(4,13,0)
26632677 {-# INLINABLE fail #-}
26642678 fail s = SpiderHostFrame $ fail s
2679+#endif
26652680
26662681instance NotReady (SpiderTimeline x) (SpiderHostFrame x) where
26672682 notReadyUntil _ = pure ()
test/Reflex/Bench/Focused.hs+1−1
@@ -134,7 +134,7 @@ holdDynChain :: (Reflex t, MonadHold t m) => Word -> Dynamic t Word -> m (Dynami
134134holdDynChain = iterM (\d -> sample (current d) >>= flip holdDyn (updated d))
135135
136136buildDynChain :: (Reflex t, MonadHold t m) => Word -> Dynamic t Word -> m (Dynamic t Word)
137−buildDynChain = iterM (\d -> do
137+buildDynChain = iterM (\d -> do
138138 let b = fmap (+1) (current d)
139139 e = fmap (*2) (updated d)
140140 buildDynamic (sample b) e)
test/hlint.hs−7
@@ -30,16 +30,9 @@ main = do
3030 ]
3131 matchFile = and <$> sequence
3232 [ extension ==? ".hs"
33− , let notElem' = liftOp notElem
34− in filePath `notElem'` filePathExceptions pwd
3533 ]
3634 files <- find recurseInto matchFile (pwd </> "src") --TODO: Someday fix all hints in tests, etc.
3735 ideas <- fmap concat $ forM files $ \f -> do
3836 putStr $ "linting file " ++ drop (length pwd + 1) f ++ "... "
3937 runHlint f
4038 if null ideas then exitSuccess else exitFailure
41−
42−filePathExceptions :: FilePath -> [FilePath]
43−filePathExceptions pwd = map (pwd </>) $
44− [ "src/Data/AppendMap.hs" -- parse error when hlint runs
45− ]