diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,11 @@
 # Changelog for can-i-haz
 
+## 0.3.0.0
+
+* Reexport `Control.Monad.Reader` from the `Control.Monad.Reader.Has` module with
+  custom `ask`, `asks` and `reader` functions more compatible with the `Has` class.
+* Similarly for `Control.Monad.Except`, `CoHas` and `throwError`/`liftError` functions.
+
 ## 0.2.1.0
 
 * Added the `update` method to `Has` (yay lenses).
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -5,7 +5,8 @@
 [![Stackage LTS][stackage-lts-badge]][stackage-lts]
 [![Stackage Nightly][stackage-nightly-badge]][stackage-nightly]
 
-`Generic` implementation of the Has-pattern (mostly useful with `MonadReader`).
+`Generic` implementation of the Has-pattern (mostly useful with `MonadReader` and `MonadState`)
+and its dual `CoHas` (mostly useful with `MonadError`).
 
 ## Motivation
 
diff --git a/can-i-haz.cabal b/can-i-haz.cabal
--- a/can-i-haz.cabal
+++ b/can-i-haz.cabal
@@ -4,10 +4,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: 92db1c8cf04877be4feda903d215b85919cb662aadcc285eb2f2e6e05f660886
+-- hash: c910611bf208cea23fae88a3630f1682ec77f54fcef2a2aed6b14ef41a12904c
 
 name:           can-i-haz
-version:        0.2.1.0
+version:        0.3.0.0
 synopsis:       Generic implementation of the Has and CoHas patterns
 description:    Please see the README on GitHub at <https://github.com/0xd34df00d/can-i-haz#readme>
 category:       Control
@@ -39,6 +39,7 @@
   ghc-options: -Wall
   build-depends:
       base >=4.7 && <5
+    , mtl
   default-language: Haskell2010
 
 test-suite can-i-haz-test
@@ -57,4 +58,5 @@
     , can-i-haz
     , deepseq
     , hspec
+    , mtl
   default-language: Haskell2010
diff --git a/src/Control/Monad/Except/CoHas.hs b/src/Control/Monad/Except/CoHas.hs
--- a/src/Control/Monad/Except/CoHas.hs
+++ b/src/Control/Monad/Except/CoHas.hs
@@ -7,8 +7,8 @@
 Description: Generic implementation of the CoHas injection pattern (dual to Has)
 Stability: experimental
 
-This module defines a class 'CoHas' intended to be used with the 'Control.Monad.Except.MonadError' class
-(and similar ones) or 'Control.Monad.Except.Except'/'Control.Monad.ExceptT' types.
+This module defines a class 'CoHas' intended to be used with the 'MonadError' class
+(and similar ones) or 'Except' / 'ExceptT' types.
 
 = The problem
 
@@ -70,13 +70,25 @@
 we instead decide that such a choice is inherently ambiguous,
 so this library will refuse to generate an instance in this case as well.
 
+= Exports
+
+This module also reexports 'Control.Monad.Except' along with some functions like 'throwError' or 'liftEither'
+with types adjusted for the intended usage of the 'CoHas' class.
+
 -}
 
 module Control.Monad.Except.CoHas
 ( CoHas(..)
 , SuccessfulSearch
+
+, module X
+, throwError
+, liftEither
 ) where
 
+import qualified Control.Monad.Except as M
+import Control.Monad.Except as X hiding(throwError, liftEither)
+import Data.Bifunctor
 import Data.Proxy
 import GHC.Generics
 
@@ -126,3 +138,17 @@
   inject = id
 
 instance SuccessfulSearch a (Either l r) path => CoHas a (Either l r)
+
+-- | Begin error processing for the error of type @option@.
+--
+-- This is "Control.Monad.Except"'s 'Control.Monad.Except.throwError'
+-- with the type adjusted for better compatibility with 'CoHas'.
+throwError :: (MonadError error m, CoHas option error) => option -> m a
+throwError = M.throwError . inject
+
+-- | Lifts an 'Either' @option@ into any 'MonadError' @error@ where @option@ can be 'inject'ed into @error@.
+--
+-- This is "Control.Monad.Except"'s 'Control.Monad.Except.liftEither'
+-- with the type adjusted for better compatibility with 'CoHas'.
+liftEither :: (MonadError error m, CoHas option error) => Either option a -> m a
+liftEither = M.liftEither . first inject
diff --git a/src/Control/Monad/Reader/Has.hs b/src/Control/Monad/Reader/Has.hs
--- a/src/Control/Monad/Reader/Has.hs
+++ b/src/Control/Monad/Reader/Has.hs
@@ -7,12 +7,12 @@
 Description : Generic implementation of the Has pattern
 Stability   : experimental
 
-This module defines a class 'Has' intended to be used with the 'Control.Monad.Reader.MonadReader' class
-or 'Control.Monad.Reader.Reader' / 'Control.Monad.Reader.ReaderT' types.
+This module defines a class 'Has' intended to be used with the 'MonadReader' class
+or 'Reader' / 'ReaderT' types.
 
 = The problem
 
-Assume there are two types representing the 'Control.Monad.Reader.MonadReader' environments
+Assume there are two types representing the 'MonadReader' environments
 for different parts of an application:
 
 @
@@ -80,15 +80,28 @@
 
 Note that this might be used for more composable functions living in 'Control.Monad.State':
 now instead of @MonadState StateType m@ we write @(MonadState s m, Has StateType s)@
-and use 'update' and 'extract' where necessary (likely in combination with 'modify' and 'gets').
+and use 'update' and 'extract' where necessary
+(likely in combination with 'Control.Monad.State.modify' and 'Control.Monad.State.gets').
 
+= Exports
+
+This module also reexports 'Control.Monad.Reader' along with some functions like 'ask' or 'reader'
+with types adjusted for the intended usage of the 'Has' class.
+
 -}
 
 module Control.Monad.Reader.Has
 ( Has(..)
 , SuccessfulSearch
+
+, module X
+, ask
+, asks
+, reader
 ) where
 
+import qualified Control.Monad.Reader as M
+import Control.Monad.Reader as X hiding(ask, asks, reader)
 import Data.Proxy
 import GHC.Generics
 
@@ -159,3 +172,24 @@
 instance SuccessfulSearch a (a0, a1, a2, a3) path => Has a (a0, a1, a2, a3)
 instance SuccessfulSearch a (a0, a1, a2, a3, a4) path => Has a (a0, a1, a2, a3, a4)
 instance SuccessfulSearch a (a0, a1, a2, a3, a4, a5) path => Has a (a0, a1, a2, a3, a4, a5)
+
+-- | Retrieves the @part@ of the monad environment.
+--
+-- This is "Control.Monad.Reader"'s 'Control.Monad.Reader.ask'
+-- with the type adjusted for better compatibility with 'Has'.
+ask :: (MonadReader record m, Has part record) => m part
+ask = M.asks extract
+
+-- | Retrieves a function of the @part@ of the current environment.
+--
+-- This is "Control.Monad.Reader"'s 'Control.Monad.Reader.asks'
+-- with the type adjusted for better compatibility with 'Has'.
+asks :: (MonadReader record m, Has part record) => (part -> a) -> m a
+asks f = f <$> ask
+
+-- | Retrieves a function of the @part@ of the current environment.
+--
+-- This is "Control.Monad.Reader"'s 'Control.Monad.Reader.reader'
+-- with the type adjusted for better compatibility with 'Has'.
+reader :: (MonadReader record m, Has part record) => (part -> a) -> m a
+reader = asks
