diff --git a/library/Neovim/Context/Internal.hs b/library/Neovim/Context/Internal.hs
--- a/library/Neovim/Context/Internal.hs
+++ b/library/Neovim/Context/Internal.hs
@@ -1,4 +1,6 @@
 {-# LANGUAGE DeriveDataTypeable         #-}
+{-# LANGUAGE DerivingStrategies         #-}
+{-# LANGUAGE DerivingVia                #-}
 {-# LANGUAGE FlexibleInstances          #-}
 {-# LANGUAGE GADTs                      #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
@@ -36,6 +38,7 @@
 import           Data.Map                                  (Map)
 import qualified Data.Map                                  as Map
 import           Data.MessagePack                          (Object)
+import           Data.Monoid                               (Ap(Ap))
 import           System.Log.Logger
 import           UnliftIO
 
@@ -55,8 +58,8 @@
 newtype Neovim env a = Neovim
     { unNeovim :: ResourceT (ReaderT (Config env) IO) a }
 
-  deriving (Functor, Applicative, Monad, MonadIO
-           , MonadThrow, MonadUnliftIO)
+  deriving newtype (Functor, Applicative, Monad, MonadIO, MonadThrow, MonadUnliftIO)
+  deriving (Semigroup, Monoid) via (Ap (Neovim env) a)
 
 
 -- | User facing instance declaration for the reader state.
diff --git a/nvim-hs.cabal b/nvim-hs.cabal
--- a/nvim-hs.cabal
+++ b/nvim-hs.cabal
@@ -1,5 +1,5 @@
 name:                nvim-hs
-version:             2.2.0.2
+version:             2.2.0.3
 synopsis:            Haskell plugin backend for neovim
 description:
   This package provides a plugin provider for neovim. It allows you to write
