diff --git a/haskus-utils-variant.cabal b/haskus-utils-variant.cabal
--- a/haskus-utils-variant.cabal
+++ b/haskus-utils-variant.cabal
@@ -1,5 +1,5 @@
 name:                haskus-utils-variant
-version:             3.1
+version:             3.2
 synopsis:            Variant and EADT
 license:             BSD3
 license-file:        LICENSE
@@ -41,6 +41,7 @@
    ,  template-haskell
    ,  haskus-utils-types        >= 1.5
    ,  haskus-utils-data         >= 1.2
+   ,  mtl                       >= 2.2
 
   ghc-options:          -Wall
   default-language:     Haskell2010
diff --git a/src/lib/Haskus/Utils/EADT/TH.hs b/src/lib/Haskus/Utils/EADT/TH.hs
--- a/src/lib/Haskus/Utils/EADT/TH.hs
+++ b/src/lib/Haskus/Utils/EADT/TH.hs
@@ -131,7 +131,12 @@
                   xs    -> fail $ "Infix pattern should have exactly two parameters (found " ++ show (length xs) ++ ")"
 
          let pat    = PatSynD patName args ImplBidir
+#if MIN_VERSION_base(4,16,0)
+                         -- handle new field for type-applications in patterns
+                         (ConP vf [] [ConP consName [] (fmap VarP conArgs)])
+#else
                          (ConP vf [ConP consName (fmap VarP conArgs)])
+#endif
 
          let
             -- retrieve constructor type without the functor var
@@ -149,7 +154,11 @@
             tyToTyList = AppT ListT (AppT (AppT ArrowT StarT) StarT)
 
             -- retrieve functor var in "e"
-#if MIN_VERSION_base(4,15,0)
+#if MIN_VERSION_base(4,16,0)
+            e = case last tvs of
+              KindedTV nm _ _ -> nm
+              PlainTV nm _    -> nm
+#elif MIN_VERSION_base(4,15,0)
             KindedTV e _ StarT = last tvs
 #else
             KindedTV e StarT = last tvs
diff --git a/src/lib/Haskus/Utils/Variant/Excepts.hs b/src/lib/Haskus/Utils/Variant/Excepts.hs
--- a/src/lib/Haskus/Utils/Variant/Excepts.hs
+++ b/src/lib/Haskus/Utils/Variant/Excepts.hs
@@ -12,9 +12,11 @@
 {-# LANGUAGE AllowAmbiguousTypes #-}
 {-# LANGUAGE BlockArguments #-}
 {-# LANGUAGE RankNTypes #-}
+{-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
 
 module Haskus.Utils.Variant.Excepts
-   ( Excepts
+   ( Excepts (..)
    , runE
    , runE_
    , liftE
@@ -53,6 +55,7 @@
 import Haskus.Utils.Variant.VEither
 
 import Control.Monad.Catch
+import Control.Monad.Reader.Class
 #if MIN_VERSION_base(4,12,0) && !MIN_VERSION_base(4,13,0)
 import qualified Control.Monad.Fail
 import           Control.Monad.Fail ( MonadFail )
@@ -211,6 +214,10 @@
          b <- Excepts (return eb)
          return (b, c)
 
+instance MonadReader r m => MonadReader r (Excepts e m) where
+  ask    = lift ask
+  local  = mapExcepts . local
+  reader = lift . reader
 
 
 -- | Signal an exception value @e@.
