diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+# Version [0.1.1.0](https://github.com/DistRap/hocd/compare/0.1.0.0...0.1.1.0) (2023-12-27)
+
+* Transformers boilerplate
+
 # Version [0.1.0.0](https://github.com/DistRap/hocd/compare/6a16c2d...0.1.0.0) (2023-12-26)
 
 * Initial release
diff --git a/hocd.cabal b/hocd.cabal
--- a/hocd.cabal
+++ b/hocd.cabal
@@ -1,6 +1,6 @@
 cabal-version:       2.2
 name:                hocd
-version:             0.1.0.0
+version:             0.1.1.0
 synopsis:            OpenOCD Haskell interface
 description:         Support for OpenOCDs TCL interface
 homepage:            https://github.com/DistRap/hocd
diff --git a/src/HOCD/Monad.hs b/src/HOCD/Monad.hs
--- a/src/HOCD/Monad.hs
+++ b/src/HOCD/Monad.hs
@@ -1,8 +1,11 @@
+{-# LANGUAGE DefaultSignatures #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
 {-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE LambdaCase #-}
 {-# LANGUAGE Rank2Types #-}
 {-# LANGUAGE TypeApplications #-}
+{-# LANGUAGE TypeOperators #-}
 
 module HOCD.Monad
   ( OCDT
@@ -24,6 +27,7 @@
 import Control.Monad.Trans (MonadTrans, lift)
 import Control.Monad.Trans.Except (ExceptT, runExceptT)
 import Control.Monad.Trans.Reader (ReaderT, runReaderT)
+import Control.Monad.Trans.State (StateT)
 import Data.Bits (FiniteBits(..))
 import Data.ByteString (ByteString)
 import Data.Word (Word32)
@@ -77,10 +81,22 @@
 class ( MonadIO m
       , MonadError OCDError m
       ) => MonadOCD m where
+
   getSocket :: m Socket
+  default getSocket
+    :: ( MonadTrans t
+       , MonadOCD m'
+       , m ~ t m'
+       )
+    => m Socket
+  getSocket = lift getSocket
 
 instance MonadIO m => MonadOCD (OCDT m) where
   getSocket = ask
+
+instance MonadOCD m => MonadOCD (StateT s m)
+instance MonadOCD m => MonadOCD (ReaderT r m)
+instance MonadOCD m => MonadOCD (ExceptT OCDError m)
 
 -- | Perform RPC call
 rpc
