@@ -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 (mempty, (<>))
6365import Data.Proxy
6466import Data.These
6567import Data.Traversable
68+import Data.Type.Equality ((:~:)(Refl))
6669import Data.Witherable (Filterable, mapMaybe)
6770import GHC.Exts hiding (toList)
6871import GHC.IORef (IORef (..))
@@ -944,8 +947,10 @@ instance Monad (BehaviorM x) where
944947 BehaviorM x >> BehaviorM y = BehaviorM $ x >> y
945948 {-# INLINE return #-}
946949 return x = BehaviorM $ return x
950+#if !MIN_VERSION_base(4,13,0)
947951 {-# INLINE fail #-}
948952 fail s = BehaviorM $ fail s
953+#endif
949954
950955data BehaviorSubscribed x a
951956 = forall p. BehaviorSubscribedHold (Hold x p)
@@ -2486,8 +2491,10 @@ instance HasSpiderTimeline x => Monad (Reflex.Class.Dynamic (SpiderTimeline x))
24862491 x >>= f = SpiderDynamic $ dynamicDynIdentity $ newJoinDyn $ newMapDyn (unSpiderDynamic . f) $ unSpiderDynamic x
24872492 {-# INLINE (>>) #-}
24882493 (>>) = (*>)
2494+#if !MIN_VERSION_base(4,13,0)
24892495 {-# INLINE fail #-}
24902496 fail _ = error "Dynamic does not support 'fail'"
2497+#endif
24912498
24922499{-# INLINABLE newJoinDyn #-}
24932500newJoinDyn :: HasSpiderTimeline x => DynamicS x (Identity (DynamicS x (Identity a))) -> Reflex.Spider.Internal.Dyn x (Identity a)
@@ -2766,8 +2773,14 @@ instance Monad (SpiderHost x) where
27662773 SpiderHost x >> SpiderHost y = SpiderHost $ x >> y
27672774 {-# INLINABLE return #-}
27682775 return x = SpiderHost $ return x
2776+#if !MIN_VERSION_base(4,13,0)
2777+ {-# INLINABLE fail #-}
2778+ fail = MonadFail.fail
2779+#endif
2780+
2781+instance MonadFail (SpiderHost x) where
27692782 {-# INLINABLE fail #-}
2770− fail s = SpiderHost $ fail s
2783+ fail s = SpiderHost $ MonadFail.fail s
27712784
27722785-- | Run an action affecting the global Spider timeline; this will be guarded by
27732786-- a mutex for that timeline
@@ -2789,8 +2802,10 @@ instance Monad (SpiderHostFrame x) where
27892802 SpiderHostFrame x >> SpiderHostFrame y = SpiderHostFrame $ x >> y
27902803 {-# INLINABLE return #-}
27912804 return x = SpiderHostFrame $ return x
2805+#if !MIN_VERSION_base(4,13,0)
27922806 {-# INLINABLE fail #-}
27932807 fail s = SpiderHostFrame $ fail s
2808+#endif
27942809
27952810instance NotReady (SpiderTimeline x) (SpiderHostFrame x) where
27962811 notReadyUntil _ = pure ()