on develop help sign in
Merge branch 'develop' into extra-query-instances
2dcfb12leon.smith@obsidian.systems
.travis.yml+3−1
@@ -29,6 +29,8 @@ matrix:
29 include:
29 include:
30 - compiler: ghcjs-8.4
30 - compiler: ghcjs-8.4
31 addons: {"apt":{"sources":["hvr-ghc"],"packages":["cabal-install-3.0"]}}
31 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"]}}
32 - compiler: ghc-8.6.5
34 - compiler: ghc-8.6.5
33 addons: {"apt":{"sources":["hvr-ghc"],"packages":["ghc-8.6.5","cabal-install-2.4"]}}
35 addons: {"apt":{"sources":["hvr-ghc"],"packages":["ghc-8.6.5","cabal-install-2.4"]}}
34 - compiler: ghc-8.4.4
36 - compiler: ghc-8.4.4
@@ -163,7 +165,7 @@ script:
163 # Constraint set no-th
165 # Constraint set no-th
164 - ${CABAL} v2-build $WITHCOMPILER --disable-tests --disable-benchmarks --constraint='reflex -use-template-haskell' all | color_cabal_output
166 - ${CABAL} v2-build $WITHCOMPILER --disable-tests --disable-benchmarks --constraint='reflex -use-template-haskell' all | color_cabal_output
165 # Constraint set old-these
167 # 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
167 # Constraint set old-witherable
169 # Constraint set old-witherable
168 - ${CABAL} v2-build $WITHCOMPILER --disable-tests --disable-benchmarks --constraint='witherable <0.3.2' all | color_cabal_output
170 - ${CABAL} v2-build $WITHCOMPILER --disable-tests --disable-benchmarks --constraint='witherable <0.3.2' all | color_cabal_output
169
171
ChangeLog.md+8−9
@@ -1,11 +1,10 @@
1# Revision history for reflex
1# Revision history for reflex
2
2
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.
4
7
5−* Data.WeakBag.traverse and Data.FastWeakBag.traverse have been
6− renamed to Data.WeakBag.traverse_ and Data.FastWeakBag.traverse_
7− respectively.
8−
9* Fixes a bug in `Reflex.Patch.MapWithMove.patchThatSortsMapWith` that was producing invalid `PatchMapWithMove`.
8* Fixes a bug in `Reflex.Patch.MapWithMove.patchThatSortsMapWith` that was producing invalid `PatchMapWithMove`.
10
9
11* Add missing `NotReady` instances:
10* Add missing `NotReady` instances:
@@ -42,16 +41,16 @@
42 * Add incrementalCoercion/coerceIncremental to go with dynamicCoercion/coerceDynamic
41 * Add incrementalCoercion/coerceIncremental to go with dynamicCoercion/coerceDynamic
43
42
44* Generalize merging functions:
43* Generalize merging functions:
45− `merge` to `mergeG`,
44+ `merge` to `mergeG`,
46− `mergeIncremental` to `mergeIncrementalG`,
45+ `mergeIncremental` to `mergeIncrementalG`,
47− `mergeIncrementalWithMove` to `mergeIncrementalWithMoveG`.
46+ `mergeIncrementalWithMove` to `mergeIncrementalWithMoveG`.
48
47
49* Generalize distribute function:
48* Generalize distribute function:
50 `distributeDMapOverDynPure` to `distributeDMapOverDynPureG`,
49 `distributeDMapOverDynPure` to `distributeDMapOverDynPureG`,
51
50
52## 0.6.2.0
51## 0.6.2.0
53
52
54−* Fix `holdDyn` so that it is lazy in its event argument
53+* Fix `holdDyn` so that it is lazy in its event argument
55 These produce `DMap`s whose values needn't be `Identity`.
54 These produce `DMap`s whose values needn't be `Identity`.
56
55
57* Stop using the now-deprecated `*Tag` classes (e.g., `ShowTag`).
56* 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
198The functions mentioned above are used to create a static FRP network.
198The functions mentioned above are used to create a static FRP network.
199There 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.
199There 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.
200
200
201−Th typeclasses and their associated annotations include:
201+The typeclasses and their associated annotations include:
202
202
203- `PostBuild`
203- `PostBuild`
204 Fire an Event when an FRP network has been set up.
204 Fire an Event when an FRP network has been set up.
@@ -206,7 +206,7 @@ Th typeclasses and their associated annotations include:
206 [B] -- Function runs in any monad supporting PostBuild
206 [B] -- Function runs in any monad supporting PostBuild
207 ```
207 ```
208
208
209−- `Adjustable`
209+- `Adjustable`
210 Use Events to add or remove pieces of an FRP network.
210 Use Events to add or remove pieces of an FRP network.
211 ```haskell
211 ```haskell
212 [A] -- Function runs in any monad supporting Adjustable
212 [A] -- Function runs in any monad supporting Adjustable
@@ -271,7 +271,7 @@ Th typeclasses and their associated annotations include:
271```haskell
271```haskell
272-- Run side-effecting actions in Event when it occurs; returned Event contains
272-- Run side-effecting actions in Event when it occurs; returned Event contains
273-- results. Side effects run in the (Performable m) monad which is associated with
273-- 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.
275-- This allows for working with IO when a ((MonadIO (Performable m)) constraint is available.
275-- This allows for working with IO when a ((MonadIO (Performable m)) constraint is available.
276[P] performEvent :: Event (Performable m a ) -> m (Event a)
276[P] performEvent :: Event (Performable m a ) -> m (Event a)
277
277
@@ -295,17 +295,20 @@ Th typeclasses and their associated annotations include:
295## Networks
295## Networks
296
296
297```haskell
297```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)
299
299
300+[A] runWithReplace :: m a -> Event t (m b) -> m (a, Event t b)
301+
300−-- Given a Dynamic of network-creating actions, create a network that is recreated whenever the Dynamic updates.
302+-- 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,
303+-- The returned Event of network results occurs when the Dynamic does. Note: Often, the type a is an Event,
302-- in which case the return value is an Event-of-Events that would typically be flattened (via switchHold).
304-- 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)
304
306
305−-- Given an initial network and an Event of network-creating actions, create a network that is recreated whenever the
307+-- 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
308+-- Event fires. The returned Dynamic of network results occurs when the Event does. Note: Often, the type a is an
307-- Event, in which case the return value is a Dynamic-of-Events that would typically be flattened.
309-- 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)
309
311
310-- Render a placeholder network to be shown while another network is not yet done building
312-- 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
10 constraints: reflex -use-template-haskell
10 constraints: reflex -use-template-haskell
11
11
12constraint-set old-these
12constraint-set old-these
13+ ghc: <8.8
13 constraints: these <1
14 constraints: these <1
14
15
15constraint-set old-witherable
16constraint-set old-witherable
dep/reflex-platform/github.json+3−3
@@ -1,7 +1,7 @@
1{
1{
2 "owner": "reflex-frp",
2 "owner": "reflex-frp",
3 "repo": "reflex-platform",
3 "repo": "reflex-platform",
4− "branch": "develop",
4+ "branch": "master",
5− "rev": "e7b76dd552a10916c7d8702c11292dac4f4299ea",
5+ "rev": "510b990d0b11f0626afbec5fe8575b5b2395391b",
6− "sha256": "0s1183arrwldcs50qhzgnv94v24n9bgq6dfq64wp0a3q2nzyvgwh"
6+ "sha256": "09cmahsbxr0963wq171c7j139iyzz49hramr4v9nsf684wcwkngv"
7}
7}
reflex.cabal+7−8
@@ -1,5 +1,5 @@
1Name: reflex
1Name: reflex
2−Version: 0.6.2.4
2+Version: 0.6.3
3Synopsis: Higher-order Functional Reactive Programming
3Synopsis: Higher-order Functional Reactive Programming
4Description: Reflex is a high-performance, deterministic, higher-order Functional Reactive Programming system
4Description: Reflex is a high-performance, deterministic, higher-order Functional Reactive Programming system
5License: BSD3
5License: BSD3
@@ -18,7 +18,7 @@ extra-source-files:
18 ChangeLog.md
18 ChangeLog.md
19
19
20tested-with:
20tested-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,
22 GHCJS ==8.4
22 GHCJS ==8.4
23
23
24flag use-reflex-optimizer
24flag use-reflex-optimizer
@@ -50,7 +50,7 @@ library
50 hs-source-dirs: src
50 hs-source-dirs: src
51 build-depends:
51 build-depends:
52 MemoTrie == 0.6.*,
52 MemoTrie == 0.6.*,
53− base >= 4.9 && < 4.13,
53+ base >= 4.9 && < 4.14,
54 bifunctors >= 5.2 && < 5.6,
54 bifunctors >= 5.2 && < 5.6,
55 comonad >= 5.0.4 && < 5.1,
55 comonad >= 5.0.4 && < 5.1,
56 constraints-extras >= 0.3 && < 0.4,
56 constraints-extras >= 0.3 && < 0.4,
@@ -58,20 +58,19 @@ library
58 data-default >= 0.5 && < 0.8,
58 data-default >= 0.5 && < 0.8,
59 dependent-map >= 0.3 && < 0.4,
59 dependent-map >= 0.3 && < 0.4,
60 exception-transformers == 0.4.*,
60 exception-transformers == 0.4.*,
61− profunctors >= 5.3 && < 5.5,
62 lens >= 4.7 && < 5,
61 lens >= 4.7 && < 5,
63 monad-control >= 1.0.1 && < 1.1,
62 monad-control >= 1.0.1 && < 1.1,
64 mtl >= 2.1 && < 2.3,
63 mtl >= 2.1 && < 2.3,
65 prim-uniq >= 0.1.0.1 && < 0.2,
64 prim-uniq >= 0.1.0.1 && < 0.2,
66 primitive >= 0.5 && < 0.8,
65 primitive >= 0.5 && < 0.8,
67− profunctors,
66+ profunctors >= 5.3 && < 5.6,
68 random == 1.1.*,
67 random == 1.1.*,
69 ref-tf == 0.4.*,
68 ref-tf == 0.4.*,
70 reflection == 2.1.*,
69 reflection == 2.1.*,
71 semigroupoids >= 4.0 && < 6,
70 semigroupoids >= 4.0 && < 6,
72 stm >= 2.4 && < 2.6,
71 stm >= 2.4 && < 2.6,
73 syb >= 0.5 && < 0.8,
72 syb >= 0.5 && < 0.8,
74− time >= 1.4 && < 1.9,
73+ time >= 1.4 && < 1.10,
75 transformers >= 0.5.6.0 && < 0.6,
74 transformers >= 0.5.6.0 && < 0.6,
76 unbounded-delays >= 0.1.0.0 && < 0.2,
75 unbounded-delays >= 0.1.0.0 && < 0.2,
77 witherable >= 0.3 && < 0.3.2
76 witherable >= 0.3 && < 0.3.2
@@ -151,9 +150,9 @@ library
151 cpp-options: -DUSE_TEMPLATE_HASKELL
150 cpp-options: -DUSE_TEMPLATE_HASKELL
152 build-depends:
151 build-depends:
153 dependent-sum >= 0.6 && < 0.7,
152 dependent-sum >= 0.6 && < 0.7,
154− haskell-src-exts >= 1.16 && < 1.22,
153+ haskell-src-exts >= 1.16 && < 1.23,
155 haskell-src-meta >= 0.6 && < 0.9,
154 haskell-src-meta >= 0.6 && < 0.9,
156− template-haskell >= 2.9 && < 2.15
155+ template-haskell >= 2.9 && < 2.16
157 exposed-modules:
156 exposed-modules:
158 Reflex.Dynamic.TH
157 Reflex.Dynamic.TH
159 other-extensions: TemplateHaskell
158 other-extensions: TemplateHaskell
release.nix+3
@@ -34,6 +34,9 @@ let
34 "release.nix"
34 "release.nix"
35 ".git"
35 ".git"
36 "dist"
36 "dist"
37+ "cabal.haskell-ci"
38+ "cabal.project"
39+ ".travis.yml"
37 ])) ./.;
40 ])) ./.;
38 };
41 };
39 })
42 })
src/Control/Monad/ReaderIO.hs+1−1
@@ -37,7 +37,7 @@ instance Applicative (ReaderIO e) where
37#if MIN_VERSION_base(4,10,0)
37#if MIN_VERSION_base(4,10,0)
38 liftA2 = liftM2
38 liftA2 = liftM2
39 {-# INLINE liftA2 #-}
39 {-# INLINE liftA2 #-}
40−#endif
40+#endif
41 (*>) = (>>)
41 (*>) = (>>)
42 {-# INLINE (*>) #-}
42 {-# INLINE (*>) #-}
43
43
src/Data/AppendMap.hs+1−1
@@ -20,7 +20,7 @@ module Data.AppendMap
20 , module Data.Map.Monoidal
20 , module Data.Map.Monoidal
21 ) where
21 ) where
22
22
23−import Prelude hiding (map, null)
23+import Prelude hiding (null)
24
24
25import Data.Coerce
25import Data.Coerce
26import Data.Default
26import Data.Default
src/Data/Functor/Misc.hs+1
@@ -53,6 +53,7 @@ import Data.Map (Map)
53import qualified Data.Map as Map
53import qualified Data.Map as Map
54import Data.Some (Some(Some))
54import Data.Some (Some(Some))
55import Data.These
55import Data.These
56+import Data.Type.Equality ((:~:)(Refl))
56import Data.Typeable hiding (Refl)
57import Data.Typeable hiding (Refl)
57
58
58--------------------------------------------------------------------------------
59--------------------------------------------------------------------------------
src/Reflex/Class.hs+6−2
@@ -200,7 +200,7 @@ import Data.Dependent.Map (DMap, DSum (..))
200import qualified Data.Dependent.Map as DMap
200import qualified Data.Dependent.Map as DMap
201import Data.Functor.Compose
201import Data.Functor.Compose
202import Data.Functor.Product
202import Data.Functor.Product
203−import Data.GADT.Compare (GEq (..), GCompare (..), (:~:) (..))
203+import Data.GADT.Compare (GEq (..), GCompare (..))
204import Data.FastMutableIntMap (PatchIntMap)
204import Data.FastMutableIntMap (PatchIntMap)
205import Data.Foldable
205import Data.Foldable
206import Data.Functor.Bind
206import Data.Functor.Bind
@@ -215,6 +215,7 @@ import Data.Some (Some(Some))
215import Data.String
215import Data.String
216import Data.These
216import Data.These
217import Data.Type.Coercion
217import Data.Type.Coercion
218+import Data.Type.Equality ((:~:) (..))
218import Data.Witherable (Filterable(..))
219import Data.Witherable (Filterable(..))
219import qualified Data.Witherable as W
220import qualified Data.Witherable as W
220import Reflex.FunctorMaybe (FunctorMaybe)
221import Reflex.FunctorMaybe (FunctorMaybe)
@@ -286,7 +287,8 @@ class ( MonadHold t (PushM t)
286 -- | Create an 'Event' that will occur whenever the currently-selected input
287 -- | Create an 'Event' that will occur whenever the currently-selected input
287 -- 'Event' occurs
288 -- 'Event' occurs
288 switch :: Behavior t (Event t a) -> Event t a
289 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.
290 coincidence :: Event t (Event t a) -> Event t a
292 coincidence :: Event t (Event t a) -> Event t a
291 -- | Extract the 'Behavior' of a 'Dynamic'.
293 -- | Extract the 'Behavior' of a 'Dynamic'.
292 current :: Dynamic t a -> Behavior t a
294 current :: Dynamic t a -> Behavior t a
@@ -662,7 +664,9 @@ instance Reflex t => Monad (Behavior t) where
662 a >>= f = pull $ sample a >>= sample . f
664 a >>= f = pull $ sample a >>= sample . f
663 -- 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.
665 -- 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.
664 return = constant
666 return = constant
667+#if !MIN_VERSION_base(4,13,0)
665 fail = error "Monad (Behavior t) does not support fail"
668 fail = error "Monad (Behavior t) does not support fail"
669+#endif
666
670
667instance (Reflex t, Monoid a) => Monoid (Behavior t a) where
671instance (Reflex t, Monoid a) => Monoid (Behavior t a) where
668 mempty = constant mempty
672 mempty = constant mempty
src/Reflex/Collection.hs+1−1
@@ -130,7 +130,7 @@ listWithKeyShallowDiff initialVals valsChanged mkChild = do
130 Nothing -> Just Nothing
130 Nothing -> Just Nothing
131
131
132 -- We don't want to let spurious re-creations of items through
132 -- We don't want to let spurious re-creations of items through
133− Just _ -> Nothing
133+ Just _ -> Nothing
134 listHoldWithKey
134 listHoldWithKey
135 initialVals
135 initialVals
136 (attachWith (flip (Map.differenceWith relevantPatch))
136 (attachWith (flip (Map.differenceWith relevantPatch))
src/Reflex/Dynamic.hs+2−1
@@ -87,11 +87,12 @@ import Data.Align
87import Data.Dependent.Map (DMap)
87import Data.Dependent.Map (DMap)
88import qualified Data.Dependent.Map as DMap
88import qualified Data.Dependent.Map as DMap
89import Data.Dependent.Sum (DSum (..))
89import Data.Dependent.Sum (DSum (..))
90−import Data.GADT.Compare ((:~:) (..), GCompare (..), GEq (..), GOrdering (..))
90+import Data.GADT.Compare (GCompare (..), GEq (..), GOrdering (..))
91import Data.Map (Map)
91import Data.Map (Map)
92import Data.Maybe
92import Data.Maybe
93import Data.Monoid ((<>))
93import Data.Monoid ((<>))
94import Data.These
94import Data.These
95+import Data.Type.Equality ((:~:) (..))
95
96
96import Debug.Trace
97import Debug.Trace
97
98
src/Reflex/DynamicWriter/Class.hs−1
@@ -26,4 +26,3 @@ class (Monad m, Monoid w) => DynamicWriter t w m | m -> t w where
26
26
27instance DynamicWriter t w m => DynamicWriter t w (ReaderT r m) where
27instance DynamicWriter t w m => DynamicWriter t w (ReaderT r m) where
28 tellDyn = lift . tellDyn
28 tellDyn = lift . tellDyn
29−
src/Reflex/PerformEvent/Base.hs+1−1
@@ -141,7 +141,7 @@ hostPerformEventT a = do
141 case mToPerform of
141 case mToPerform of
142 Nothing -> return [result']
142 Nothing -> return [result']
143 Just toPerform -> do
143 Just toPerform -> do
144− responses <- runHostFrame $ traverseRequesterData (Identity <$>) toPerform
144+ responses <- runHostFrame $ traverseRequesterData (fmap Identity) toPerform
145 mrt <- readRef responseTrigger
145 mrt <- readRef responseTrigger
146 let followupEventTriggers = case mrt of
146 let followupEventTriggers = case mrt of
147 Just rt -> [rt :=> Identity responses]
147 Just rt -> [rt :=> Identity responses]
src/Reflex/Spider/Internal.hs+16−1
@@ -43,6 +43,8 @@ import Control.Monad.Reader.Class
43import Control.Monad.IO.Class
43import Control.Monad.IO.Class
44import Control.Monad.ReaderIO
44import Control.Monad.ReaderIO
45import Control.Monad.Ref
45import Control.Monad.Ref
46+import Control.Monad.Fail (MonadFail)
47+import qualified Control.Monad.Fail as MonadFail
46import Data.Align
48import Data.Align
47import Data.Coerce
49import Data.Coerce
48import Data.Dependent.Map (DMap, DSum (..))
50import Data.Dependent.Map (DMap, DSum (..))
@@ -63,6 +65,7 @@ import Data.Monoid ((<>))
63import Data.Proxy
65import Data.Proxy
64import Data.These
66import Data.These
65import Data.Traversable
67import Data.Traversable
68+import Data.Type.Equality ((:~:)(Refl))
66import Data.Witherable (Filterable, mapMaybe)
69import Data.Witherable (Filterable, mapMaybe)
67import GHC.Exts
70import GHC.Exts
68import GHC.IORef (IORef (..))
71import GHC.IORef (IORef (..))
@@ -972,8 +975,10 @@ instance Monad (BehaviorM x) where
972 BehaviorM x >> BehaviorM y = BehaviorM $ x >> y
975 BehaviorM x >> BehaviorM y = BehaviorM $ x >> y
973 {-# INLINE return #-}
976 {-# INLINE return #-}
974 return x = BehaviorM $ return x
977 return x = BehaviorM $ return x
978+#if !MIN_VERSION_base(4,13,0)
975 {-# INLINE fail #-}
979 {-# INLINE fail #-}
976 fail s = BehaviorM $ fail s
980 fail s = BehaviorM $ fail s
981+#endif
977
982
978data BehaviorSubscribed x a
983data BehaviorSubscribed x a
979 = forall p. BehaviorSubscribedHold (Hold x p)
984 = forall p. BehaviorSubscribedHold (Hold x p)
@@ -2357,8 +2362,10 @@ instance HasSpiderTimeline x => Monad (Reflex.Class.Dynamic (SpiderTimeline x))
2357 x >>= f = SpiderDynamic $ dynamicDynIdentity $ newJoinDyn $ newMapDyn (unSpiderDynamic . f) $ unSpiderDynamic x
2362 x >>= f = SpiderDynamic $ dynamicDynIdentity $ newJoinDyn $ newMapDyn (unSpiderDynamic . f) $ unSpiderDynamic x
2358 {-# INLINE (>>) #-}
2363 {-# INLINE (>>) #-}
2359 (>>) = (*>)
2364 (>>) = (*>)
2365+#if !MIN_VERSION_base(4,13,0)
2360 {-# INLINE fail #-}
2366 {-# INLINE fail #-}
2361 fail _ = error "Dynamic does not support 'fail'"
2367 fail _ = error "Dynamic does not support 'fail'"
2368+#endif
2362
2369
2363{-# INLINABLE newJoinDyn #-}
2370{-# INLINABLE newJoinDyn #-}
2364newJoinDyn :: HasSpiderTimeline x => DynamicS x (Identity (DynamicS x (Identity a))) -> Reflex.Spider.Internal.Dyn x (Identity a)
2371newJoinDyn :: 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
2637 SpiderHost x >> SpiderHost y = SpiderHost $ x >> y
2644 SpiderHost x >> SpiderHost y = SpiderHost $ x >> y
2638 {-# INLINABLE return #-}
2645 {-# INLINABLE return #-}
2639 return x = SpiderHost $ return x
2646 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
2640 {-# INLINABLE fail #-}
2653 {-# INLINABLE fail #-}
2641− fail s = SpiderHost $ fail s
2654+ fail s = SpiderHost $ MonadFail.fail s
2642
2655
2643-- | Run an action affecting the global Spider timeline; this will be guarded by
2656-- | Run an action affecting the global Spider timeline; this will be guarded by
2644-- a mutex for that timeline
2657-- a mutex for that timeline
@@ -2660,8 +2673,10 @@ instance Monad (SpiderHostFrame x) where
2660 SpiderHostFrame x >> SpiderHostFrame y = SpiderHostFrame $ x >> y
2673 SpiderHostFrame x >> SpiderHostFrame y = SpiderHostFrame $ x >> y
2661 {-# INLINABLE return #-}
2674 {-# INLINABLE return #-}
2662 return x = SpiderHostFrame $ return x
2675 return x = SpiderHostFrame $ return x
2676+#if !MIN_VERSION_base(4,13,0)
2663 {-# INLINABLE fail #-}
2677 {-# INLINABLE fail #-}
2664 fail s = SpiderHostFrame $ fail s
2678 fail s = SpiderHostFrame $ fail s
2679+#endif
2665
2680
2666instance NotReady (SpiderTimeline x) (SpiderHostFrame x) where
2681instance NotReady (SpiderTimeline x) (SpiderHostFrame x) where
2667 notReadyUntil _ = pure ()
2682 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
134holdDynChain = iterM (\d -> sample (current d) >>= flip holdDyn (updated d))
134holdDynChain = iterM (\d -> sample (current d) >>= flip holdDyn (updated d))
135
135
136buildDynChain :: (Reflex t, MonadHold t m) => Word -> Dynamic t Word -> m (Dynamic t Word)
136buildDynChain :: (Reflex t, MonadHold t m) => Word -> Dynamic t Word -> m (Dynamic t Word)
137−buildDynChain = iterM (\d -> do
137+buildDynChain = iterM (\d -> do
138 let b = fmap (+1) (current d)
138 let b = fmap (+1) (current d)
139 e = fmap (*2) (updated d)
139 e = fmap (*2) (updated d)
140 buildDynamic (sample b) e)
140 buildDynamic (sample b) e)
test/hlint.hs−7
@@ -30,16 +30,9 @@ main = do
30 ]
30 ]
31 matchFile = and <$> sequence
31 matchFile = and <$> sequence
32 [ extension ==? ".hs"
32 [ extension ==? ".hs"
33− , let notElem' = liftOp notElem
34− in filePath `notElem'` filePathExceptions pwd
35 ]
33 ]
36 files <- find recurseInto matchFile (pwd </> "src") --TODO: Someday fix all hints in tests, etc.
34 files <- find recurseInto matchFile (pwd </> "src") --TODO: Someday fix all hints in tests, etc.
37 ideas <- fmap concat $ forM files $ \f -> do
35 ideas <- fmap concat $ forM files $ \f -> do
38 putStr $ "linting file " ++ drop (length pwd + 1) f ++ "... "
36 putStr $ "linting file " ++ drop (length pwd + 1) f ++ "... "
39 runHlint f
37 runHlint f
40 if null ideas then exitSuccess else exitFailure
38 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− ]