@@ -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 ()