diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,3 +2,7 @@
 
 ## 0.0.1
 The first compilable and working version
+
+## 0.0.2
+### Added
+* Add `hask` to read from MonadReaer
diff --git a/hset.cabal b/hset.cabal
--- a/hset.cabal
+++ b/hset.cabal
@@ -1,5 +1,5 @@
 name:                hset
-version:             0.0.1
+version:             0.0.2
 synopsis:            Primitive heterogenous read-only set
 license:             BSD3
 license-file:        LICENSE
@@ -18,10 +18,16 @@
 library
   default-language:    Haskell2010
   hs-source-dirs:      src
+
   exposed-modules:     Data.HSet
+                     , Data.HSet.TypeLevel
+
   build-depends:       base >=4.6 && < 5
+                     , mtl
 
-  default-extensions: DataKinds
+  default-extensions: ConstraintKinds
+                    , DataKinds
+                    , FlexibleContexts
                     , FlexibleInstances
                     , GADTs
                     , KindSignatures
diff --git a/src/Data/HSet.hs b/src/Data/HSet.hs
--- a/src/Data/HSet.hs
+++ b/src/Data/HSet.hs
@@ -3,16 +3,8 @@
        , HGet(..)
        ) where
 
-data Nat = Z | S Nat
-
-type family Elem (typ :: *) (typs :: [*]) :: Bool where
-    Elem typ '[]             = 'False
-    Elem typ (typ ': typs)   = 'True
-    Elem typ1 (typ2 ': typs) = Elem typ1 typs
-
-type family Index (typ :: *) (typs :: [*]) :: Nat where
-  Index t (t ': ts) = 'Z
-  Index t (tt ': ts) = 'S (Index t ts)
+import Control.Monad.Reader
+import Data.HSet.TypeLevel
 
 -- | Heterogeneous set (list) of elements with unique types. Usefull
 -- with MonadReader
@@ -20,6 +12,7 @@
   HSNil  :: HSet '[]
   HSCons :: ('False ~ (Elem elem elems)) => elem -> HSet elems -> HSet (elem ': elems)
 
+
 class (i ~ (Index e els)) => HGet els e i where
   -- | Get any data from HSet for you
   hget :: HSet els -> e
@@ -30,7 +23,14 @@
 instance (i ~ (Index e els), ('S i) ~ (Index e (e1 ': els)), HGet els e i) => HGet (e1 ': els) e ('S i) where
   hget (HSCons _ els) = hget els
 
+type Contains els e = HGet els e (Index e els)
 
+hask :: (MonadReader (HSet els) m, Contains els e) => m e
+hask = do
+  h <- ask
+  return $ hget h
+
+
 ----------------------------------------------------------------
 -- Tests: if this is compilable then tests done trollface.jpg --
 
@@ -52,3 +52,8 @@
 
 funFloat :: Float
 funFloat = hget fun
+
+this :: (Double, Float)
+this =
+  let h = (,) <$> hask <*> hask
+  in runReader h fun
diff --git a/src/Data/HSet/TypeLevel.hs b/src/Data/HSet/TypeLevel.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/HSet/TypeLevel.hs
@@ -0,0 +1,12 @@
+module Data.HSet.TypeLevel where
+
+data Nat = Z | S Nat
+
+type family Elem (typ :: *) (typs :: [*]) :: Bool where
+    Elem typ '[]             = 'False
+    Elem typ (typ ': typs)   = 'True
+    Elem typ1 (typ2 ': typs) = Elem typ1 typs
+
+type family Index (typ :: *) (typs :: [*]) :: Nat where
+  Index t (t ': ts) = 'Z
+  Index t (tt ': ts) = 'S (Index t ts)
