diff --git a/hal.cabal b/hal.cabal
--- a/hal.cabal
+++ b/hal.cabal
@@ -4,10 +4,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: f0a8761c52b07313708798791d5b65ef7ac4ab2fce5c2b8b26beea0bf4f6770e
+-- hash: 9ccf40a0ac9a96704caf7e69886eb5b1c146bf3bbb30cb8d886286db22f19ce3
 
 name:           hal
-version:        0.4.0
+version:        0.4.1
 synopsis:       A runtime environment for Haskell applications running on AWS Lambda.
 description:    This library uniquely supports different types of AWS Lambda Handlers for your
                 needs/comfort with advanced Haskell. Instead of exposing a single function
@@ -49,7 +49,7 @@
     , base >=4.7 && <5
     , bytestring
     , containers
-    , envy
+    , envy <2
     , exceptions
     , http-conduit
     , http-types
diff --git a/src/AWS/Lambda/Combinators.hs b/src/AWS/Lambda/Combinators.hs
--- a/src/AWS/Lambda/Combinators.hs
+++ b/src/AWS/Lambda/Combinators.hs
@@ -47,20 +47,26 @@
 --
 --     module Main where
 --
+--     import AWS.Lambda.Context (LambdaContext(..))
 --     import AWS.Lambda.Runtime (readerTRuntime)
 --     import AWS.Lambda.Combinators (withIOInterface)
 --     import Data.Aeson (FromJSON)
+--     import Data.Text (unpack)
 --     import System.Environment (getEnv)
+--     import GHC.Generics (Generic)
 --
---     data Named = {
+--     data Named = Named {
 --       name :: String
 --     } deriving Generic
 --     instance FromJSON Named
 --
---     myHandler :: Named -> IO String
---     myHandler (Named { name }) = do
+--     myHandler :: LambdaContext -> Named -> IO (Either String String)
+--     myHandler (LambdaContext { functionName }) (Named { name }) = do
 --       greeting <- getEnv \"GREETING\"
---       return $ greeting ++ name
+--       return $ if name == \"World\" then
+--         Right $ "Hello, World from " ++ unpack functionName ++ "!"
+--       else
+--         Left "Can only greet the world."
 --
 --     main :: IO ()
 --     main = (readerTRuntime . withIOInterface) myHandler
@@ -86,12 +92,14 @@
 --
 --     module Main where
 --
+--     import AWS.Lambda.Context (LambdaContext(..))
 --     import AWS.Lambda.Runtime (readerTRuntime)
 --     import AWS.Lambda.Combinators (withFallibleInterface)
 --     import Data.Aeson (FromJSON)
---     import System.Environment (getEnv)
+--     import Data.Text (unpack)
+--     import GHC.Generics (Generic)
 --
---     data Named = {
+--     data Named = Named {
 --       name :: String
 --     } deriving Generic
 --     instance FromJSON Named
@@ -99,7 +107,7 @@
 --     myHandler :: LambdaContext -> Named -> Either String String
 --     myHandler (LambdaContext { functionName }) (Named { name }) =
 --       if name == \"World\" then
---         Right "Hello, World from " ++ unpack functionName ++ "!"
+--         Right $ "Hello, World from " ++ unpack functionName ++ "!"
 --       else
 --         Left "Can only greet the world."
 --
@@ -128,11 +136,14 @@
 --
 --     module Main where
 --
+--     import AWS.Lambda.Context (LambdaContext(..))
 --     import AWS.Lambda.Runtime (readerTRuntime)
 --     import AWS.Lambda.Combinators (withPureInterface)
 --     import Data.Aeson (FromJSON)
+--     import Data.Text (unpack)
+--     import GHC.Generics (Generic)
 --
---     data Named = {
+--     data Named = Named {
 --       name :: String
 --     } deriving Generic
 --     instance FromJSON Named
@@ -171,8 +182,9 @@
 --     import AWS.Lambda.Runtime (readerTRuntime)
 --     import AWS.Lambda.Combinators (withPureInterface, withoutContext)
 --     import Data.Aeson (FromJSON)
+--     import GHC.Generics (Generic)
 --
---     data Named = {
+--     data Named = Named {
 --       name :: String
 --     } deriving Generic
 --     instance FromJSON Named
diff --git a/src/AWS/Lambda/Runtime.hs b/src/AWS/Lambda/Runtime.hs
--- a/src/AWS/Lambda/Runtime.hs
+++ b/src/AWS/Lambda/Runtime.hs
@@ -52,23 +52,25 @@
 --
 --     module Main where
 --
---     import AWS.Lambda.Context (LambdaContext(..))
+--     import AWS.Lambda.Context (LambdaContext(..), runReaderTLambdaContext)
 --     import AWS.Lambda.Runtime (mRuntimeWithContext)
 --     import Control.Monad.Reader (ReaderT, ask)
---     import Control.Monad.State.Lazy (StateT, runStateT, get, put)
+--     import Control.Monad.State.Lazy (StateT, evalStateT, get, put)
+--     import Control.Monad.Trans (liftIO)
 --     import Data.Aeson (FromJSON)
 --     import Data.Text (unpack)
 --     import System.Environment (getEnv)
+--     import GHC.Generics (Generic)
 --
---     data Named = {
+--     data Named = Named {
 --       name :: String
 --     } deriving Generic
 --     instance FromJSON Named
 --
---     myHandler :: Named -> StateT Int (ReaderT LambdaContext IO String)
+--     myHandler :: Named -> StateT Int (ReaderT LambdaContext IO) String
 --     myHandler Named { name } = do
 --       LambdaContext { functionName } <- ask
---       greeting <- getEnv \"GREETING\"
+--       greeting <- liftIO $ getEnv \"GREETING\"
 --
 --       greetingCount <- get
 --       put $ greetingCount + 1
@@ -76,7 +78,7 @@
 --       return $ greeting ++ name ++ " (" ++ show greetingCount ++ ") from " ++ unpack functionName ++ "!"
 --
 --     main :: IO ()
---     main = runStateT (mRuntimeWithContext myHandler) 0
+--     main = runReaderTLambdaContext (evalStateT (mRuntimeWithContext myHandler) 0)
 -- @
 mRuntimeWithContext :: (HasLambdaContext r, MonadCatch m, MonadReader r m, MonadIO m, FromJSON event, ToJSON result) =>
   (event -> m result) -> m ()
@@ -97,11 +99,13 @@
 --     import AWS.Lambda.Context (LambdaContext(..))
 --     import AWS.Lambda.Runtime (readerTRuntime)
 --     import Control.Monad.Reader (ReaderT, ask)
+--     import Control.Monad.Trans (liftIO)
 --     import Data.Aeson (FromJSON)
 --     import Data.Text (unpack)
 --     import System.Environment (getEnv)
+--     import GHC.Generics (Generic)
 --
---     data Named = {
+--     data Named = Named {
 --       name :: String
 --     } deriving Generic
 --     instance FromJSON Named
@@ -109,7 +113,7 @@
 --     myHandler :: Named -> ReaderT LambdaContext IO String
 --     myHandler Named { name } = do
 --       LambdaContext { functionName } <- ask
---       greeting <- getEnv \"GREETING\"
+--       greeting <- liftIO $ getEnv \"GREETING\"
 --       return $ greeting ++ name ++ " from " ++ unpack functionName ++ "!"
 --
 --     main :: IO ()
@@ -136,16 +140,17 @@
 --     import Data.Aeson (FromJSON)
 --     import Data.Text (unpack)
 --     import System.Environment (getEnv)
+--     import GHC.Generics (Generic)
 --
---     data Named = {
+--     data Named = Named {
 --       name :: String
 --     } deriving Generic
 --     instance FromJSON Named
 --
---     myHandler :: LambdaContext -> Named -> IO String
+--     myHandler :: LambdaContext -> Named -> IO (Either String String)
 --     myHandler (LambdaContext { functionName }) (Named { name }) = do
 --       greeting <- getEnv \"GREETING\"
---       return $ greeting ++ name ++ " from " ++ unpack functionName ++ "!"
+--       return $ pure $ greeting ++ name ++ " from " ++ unpack functionName ++ "!"
 --
 --     main :: IO ()
 --     main = ioRuntimeWithContext myHandler
@@ -168,16 +173,17 @@
 --     import AWS.Lambda.Runtime (ioRuntime)
 --     import Data.Aeson (FromJSON)
 --     import System.Environment (getEnv)
+--     import GHC.Generics (Generic)
 --
---     data Named = {
+--     data Named = Named {
 --       name :: String
 --     } deriving Generic
 --     instance FromJSON Named
 --
---     myHandler :: Named -> IO String
+--     myHandler :: Named -> IO (Either String String)
 --     myHandler (Named { name }) = do
 --       greeting <- getEnv \"GREETING\"
---       return $ greeting ++ name
+--       return $ pure $ greeting ++ name
 --
 --     main :: IO ()
 --     main = ioRuntime myHandler
@@ -200,8 +206,9 @@
 --     import AWS.Lambda.Runtime (fallibleRuntimeWithContext)
 --     import Data.Aeson (FromJSON)
 --     import Data.Text (unpack)
+--     import GHC.Generics (Generic)
 --
---     data Named = {
+--     data Named = Named {
 --       name :: String
 --     } deriving Generic
 --     instance FromJSON Named
@@ -209,7 +216,7 @@
 --     myHandler :: LambdaContext -> Named -> Either String String
 --     myHandler (LambdaContext { functionName }) (Named { name }) =
 --       if name == \"World\" then
---         Right "Hello, World from " ++ unpack functionName ++ "!"
+--         Right $ "Hello, World from " ++ unpack functionName ++ "!"
 --       else
 --         Left "Can only greet the world."
 --
@@ -232,8 +239,9 @@
 --
 --     import AWS.Lambda.Runtime (fallibleRuntime)
 --     import Data.Aeson (FromJSON)
+--     import GHC.Generics (Generic)
 --
---     data Named = {
+--     data Named = Named {
 --       name :: String
 --     } deriving Generic
 --     instance FromJSON Named
@@ -266,8 +274,9 @@
 --     import AWS.Lambda.Runtime (pureRuntimeWithContext)
 --     import Data.Aeson (FromJSON)
 --     import Data.Text (unpack)
+--     import GHC.Generics (Generic)
 --
---     data Named = {
+--     data Named = Named {
 --       name :: String
 --     } deriving Generic
 --     instance FromJSON Named
@@ -294,8 +303,9 @@
 --
 --     import AWS.Lambda.Runtime (pureRuntime)
 --     import Data.Aeson (FromJSON)
+--     import GHC.Generics (Generic)
 --
---     data Named = {
+--     data Named = Named {
 --       name :: String
 --     } deriving Generic
 --     instance FromJSON Named
