diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # CHANGELOG
 
+## 1.0.2
+### Added
+* added forgotten `MonadMask` instance
+
 ## 1.0.1
 ### Changed
 * fix `Applicative` constraints for base < 4.8
diff --git a/examples/Main.hs b/examples/Main.hs
new file mode 100644
--- /dev/null
+++ b/examples/Main.hs
@@ -0,0 +1,93 @@
+module Main where
+
+import Control.Monad.Base
+import Control.Monad.HReader
+import Data.HSet
+
+type ListA = '[Int, Bool, Char]
+
+type ListB = '[Int, Bool]
+
+type MonadA m =
+  ( MHRElemsConstraint m ListA
+  , MonadBase IO m
+  )
+
+type MonadB m =
+  ( MHRElemsConstraint m ListB
+  , MonadBase IO m
+  )
+
+printInt
+  :: (MonadBase IO m, MonadHReader m, HGettable (MHRElements m) Int)
+  => m ()
+printInt = do
+  int <- hask
+  liftBase $ print $ "int: " ++ show (int :: Int)
+
+printBool
+  :: (MonadBase IO m, MonadHReader m, HGettable (MHRElements m) Bool)
+  => m ()
+printBool = do
+  b <- hask
+  liftBase $ print $ "bool: " ++ show (b :: Bool)
+
+printChar
+  :: (MonadBase IO m, MonadHReader m, HGettable (MHRElements m) Char)
+  => m ()
+printChar = do
+  c <- hask
+  liftBase $ print $ "char: " ++ show (c :: Char)
+
+monadA :: (MonadA m) => m ()
+monadA = do
+  liftBase $ print "monad A"
+  printInt
+  printBool
+  printChar
+  monadB
+
+monadB :: (MonadB m) => m ()
+monadB = do
+  liftBase $ print "monad B"
+  printInt
+  printBool
+
+runB :: (AllHGettable els ListB) => HSet els -> IO ()
+runB h = do
+  print "performing some IO actions around B"
+  runHReaderT h monadB
+
+runA :: (AllHGettable els ListA) => HSet els -> IO ()
+runA h = do
+  print "performing some IO actions around A"
+  runHReaderT h monadA
+
+runAinB :: (MonadB m) => m ()
+runAinB = do
+  liftBase $ print "running A in B"
+  h <- askHSet
+  let c = 'b'
+      hb :: HSet ListB
+      hb = subHSet h
+      ha = HSCons c hb
+  liftBase $ runA ha
+
+runBinA :: (MonadA m) => m ()
+runBinA = do
+  liftBase $ print "running B in A"
+  h <- askHSet
+  liftBase $ runB h
+
+main :: IO ()
+main = do
+  let
+    ha :: HSet ListA
+    ha = HSCons 10 $ HSCons True $ HSCons 'c' HSNil
+    hb :: HSet ListB
+    hb = subHSet ha
+  runHReaderT ha monadA
+  runHReaderT ha monadB
+  runHReaderT hb monadB
+  runHReaderT ha runBinA
+  runHReaderT hb runAinB
diff --git a/hreader.cabal b/hreader.cabal
--- a/hreader.cabal
+++ b/hreader.cabal
@@ -1,5 +1,5 @@
 name:                hreader
-version:             1.0.1
+version:             1.0.2
 synopsis:            Generalization of MonadReader and ReaderT using hset
 license:             BSD3
 license-file:        LICENSE
@@ -45,3 +45,20 @@
 
   exposed-modules:     Control.Monad.HReader
                      , Control.Monad.HReader.Class
+
+
+test-suite examples
+  type:                exitcode-stdio-1.0
+  default-language:    Haskell2010
+  ghc-options:        -Wall
+  hs-source-dirs:      examples
+  main-is:             Main.hs
+
+  default-extensions: ConstraintKinds
+                    , DataKinds
+                    , FlexibleContexts
+
+  build-depends: base
+               , hreader
+               , hset
+               , transformers-base
diff --git a/src/Control/Monad/HReader.hs b/src/Control/Monad/HReader.hs
--- a/src/Control/Monad/HReader.hs
+++ b/src/Control/Monad/HReader.hs
@@ -35,7 +35,7 @@
     } deriving ( Functor, Applicative, Monad, MonadIO
                , MonadError e, MonadCont, MonadWriter w
                , MonadState s, MonadBase b
-               , MonadThrow, MonadCatch
+               , MonadThrow, MonadCatch, MonadMask
                , Typeable, Generic  )
 
 runHReaderT :: HSet els -> HReaderT els m a -> m a
diff --git a/src/Control/Monad/HReader/Class.hs b/src/Control/Monad/HReader/Class.hs
--- a/src/Control/Monad/HReader/Class.hs
+++ b/src/Control/Monad/HReader/Class.hs
@@ -34,7 +34,7 @@
 -- from type list __[Int, Bool]__. Usable to reuse type lists for
 -- constraints and concrete HSet.
 type family MHRElemsConstraint (m :: * -> *) (els :: [*]) :: Constraint where
-  MHRElemsConstraint m '[] = ()
+  MHRElemsConstraint m '[] = (MonadHReader m)
   MHRElemsConstraint m (e ': els) = (HGettable (MHRElements m) e, MHRElemsConstraint m els)
 
 -- | Monad which is a reader of HSet (or just can construct it).
