diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,9 @@
 # Revision history for reflex
 
+## 0.9.3.1
+
+* Add support for GHC 9.8 and 9.10
+
 ## 0.9.3.0
 
 * Headless Host: Generalize to allow returning arbitrary types
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -15,6 +15,7 @@
 * [Reflex-DOM](https://github.com/reflex-frp/reflex-dom): A framework built on Reflex that facilitates the development of web pages, including highly-interactive single-page apps.
 * [Obelisk](https://github.com/obsidiansystems/obelisk#obelisk): A framework built on Reflex and Reflex-DOM for functional reactive web and mobile applications, with batteries included.
 * [Get started with Reflex](https://github.com/reflex-frp/reflex-platform)
+* [#reflex-frp:matrix.org](https://matrix.to/#/#reflex-frp:matrix.org): Official Matrix room
 * [/r/reflexfrp](https://www.reddit.com/r/reflexfrp)
 * [irc.freenode.net #reflex-frp](http://webchat.freenode.net?channels=%23reflex-frp&uio=d4)
 
diff --git a/reflex.cabal b/reflex.cabal
--- a/reflex.cabal
+++ b/reflex.cabal
@@ -1,5 +1,5 @@
 Name: reflex
-Version: 0.9.3.0
+Version: 0.9.3.1
 Synopsis: Higher-order Functional Reactive Programming
 Description:
   Interactive programs without callbacks or side-effects.
@@ -28,7 +28,7 @@
   ChangeLog.md
 
 tested-with:
-  GHC  ==8.4.4 || ==8.6.5 || ==8.8.1 || ==8.10.7 || ==9.0.1 || ==9.2.5 || ==9.4.5 || ==9.6.1,
+  GHC  ==8.4.4 || ==8.6.5 || ==8.8.1 || ==8.10.7 || ==9.0.1 || ==9.2.5 || ==9.4.5 || ==9.6.1 || ==9.8.2 || ==9.10.1,
   GHCJS ==8.6 || ==8.10
 
 flag use-reflex-optimizer
@@ -71,24 +71,25 @@
   hs-source-dirs: src
   build-depends:
     MemoTrie == 0.6.*,
-    base >= 4.11 && < 4.19,
+    base >= 4.11 && < 4.21,
     bifunctors >= 5.2 && < 5.7,
     comonad >= 5.0.4 && < 5.1,
-    commutative-semigroups >= 0.1 && <0.2,
-    constraints >= 0.10 && <0.14,
+    commutative-semigroups >= 0.1 && <0.3,
+    constraints >= 0.10 && <0.15,
     constraints-extras >= 0.3 && < 0.5,
-    containers >= 0.6 && < 0.7,
+    containers >= 0.6 && < 0.8,
     data-default >= 0.5 && < 0.8,
     dependent-map >= 0.3 && < 0.5,
+    dependent-sum >= 0.6 && < 0.8,
     exceptions >= 0.10 && < 0.11,
     exception-transformers >= 0.4 && < 0.5,
-    lens >= 4.7 && < 5.3,
+    lens >= 4.7 && < 5.4,
     mmorph >= 1.0 && < 1.3,
     monad-control >= 1.0.1 && < 1.1,
     mtl >= 2.1 && < 2.4,
     patch >= 0.0.7 && < 0.1,
     prim-uniq >= 0.1.0.1 && < 0.3,
-    primitive >= 0.5 && < 0.8,
+    primitive >= 0.5 && < 0.10,
     profunctors >= 5.3 && < 5.7,
     random >= 1.1 && < 1.3,
     ref-tf >= 0.4 && < 0.6,
@@ -186,16 +187,12 @@
   if flag(use-template-haskell)
     cpp-options: -DUSE_TEMPLATE_HASKELL
     build-depends:
-      dependent-sum >= 0.6 && < 0.8,
       haskell-src-exts >= 1.16 && < 1.24,
       haskell-src-meta >= 0.6 && < 0.9,
-      template-haskell >= 2.9 && < 2.21
+      template-haskell >= 2.9 && < 2.23
     exposed-modules:
       Reflex.Dynamic.TH
     other-extensions: TemplateHaskell
-  else
-    build-depends:
-      dependent-sum >= 0.6 && < 0.8
 
   if flag(fast-weak) && impl(ghcjs)
     cpp-options: -DGHCJS_FAST_WEAK
diff --git a/src/Reflex/Network.hs b/src/Reflex/Network.hs
--- a/src/Reflex/Network.hs
+++ b/src/Reflex/Network.hs
@@ -22,7 +22,7 @@
 -- | A 'Dynamic' "network": Takes a 'Dynamic' of network-creating actions and replaces the network whenever the 'Dynamic' updates.
 -- The returned Event of network results fires at post-build time and when the 'Dynamic' updates.
 -- Note:  Often, the type 'a' is an Event, in which case the return value is an Event-of-Events, where the outer 'Event' fires
--- when switching networks. Such an 'Event' would typically be flattened (via 'switchPromptly').
+-- when switching networks. Such an 'Event' would typically be flattened (via 'switchHoldPromptly').
 networkView :: (NotReady t m, Adjustable t m, PostBuild t m) => Dynamic t (m a) -> m (Event t a)
 networkView child = do
   postBuild <- getPostBuild
@@ -30,8 +30,8 @@
   snd <$> runWithReplace notReady newChild
 
 -- | Given an initial "network" and an 'Event' of network-creating actions, create a network that is recreated whenever the Event fires.
---   The returned Dynamic of network results occurs when the Event does.
---   Note:  Often, the type 'a' is an Event, in which case the return value is a Dynamic-of-Events that would typically be flattened.
+-- The returned Dynamic of network results occurs when the Event does.
+-- Note:  Often, the type 'a' is an Event, in which case the return value is a Dynamic-of-Events that would typically be flattened (via 'switchPromptlyDyn').
 networkHold :: (Adjustable t m, MonadHold t m) => m a -> Event t (m a) -> m (Dynamic t a)
 networkHold child0 newChild = do
   (result0, newResult) <- runWithReplace child0 newChild
diff --git a/src/Reflex/PerformEvent/Base.hs b/src/Reflex/PerformEvent/Base.hs
--- a/src/Reflex/PerformEvent/Base.hs
+++ b/src/Reflex/PerformEvent/Base.hs
@@ -73,7 +73,7 @@
   type PrimState (PerformEventT t m) = PrimState (HostFrame t)
   primitive = PerformEventT . lift . primitive
 
-instance (ReflexHost t, Ref m ~ Ref IO) => PerformEvent t (PerformEventT t m) where
+instance (Monad (HostFrame t), ReflexHost t, Ref m ~ Ref IO) => PerformEvent t (PerformEventT t m) where
   type Performable (PerformEventT t m) = HostFrame t
   {-# INLINABLE performEvent_ #-}
   performEvent_ = PerformEventT . requesting_
