diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,11 @@
 # Revision history for nothunks
 
+## 0.1.1.0 -- 2020-09-29
+
+* Export `Context` and `GWNoThunks`
+* Fix typos in Haddocks
+* Improve bounds (and add upper bounds)
+
 ## 0.1.0.0 -- 2020-09-09
 
-* Initial public release 
+* Initial public release
diff --git a/nothunks.cabal b/nothunks.cabal
--- a/nothunks.cabal
+++ b/nothunks.cabal
@@ -1,6 +1,6 @@
 cabal-version:      2.4
 name:               nothunks
-version:            0.1.0.0
+version:            0.1.1.0
 synopsis:           Examine values for unexpected thunks
 description:        Long lived application data typically should not contain
                     any thunks. This library can be used to examine values for
@@ -22,13 +22,17 @@
 
 library
     exposed-modules:  NoThunks.Class
+
     build-depends:    base       >= 4.12 && < 5
-                    , bytestring >= 0.10
-                    , containers >= 0.6
-                    , ghc-heap   >= 8.6
-                    , text       >= 1.2
-                    , time       >= 1.8
-                    , vector     >= 0.12
+                    , bytestring >= 0.10 && < 0.11
+                    , containers >= 0.5  && < 0.7
+                    , text       >= 1.2  && < 1.3
+                    , time       >= 1.5  && < 1.11
+                    , vector     >= 0.12 && < 0.13
+
+                      -- Whatever is bundled with ghc
+                    , ghc-heap
+
     hs-source-dirs:   src
     default-language: Haskell2010
     ghc-options:      -Wall
@@ -37,15 +41,24 @@
     type:             exitcode-stdio-1.0
     main-is:          Main.hs
     other-modules:    Test.NoThunks.Class
-    build-depends:    base           >= 4.12
-                    , containers     >= 0.6
-                    , ghc-prim       >= 0.5
-                    , hedgehog       >= 1.0
-                    , random         >= 1.1
-                    , tasty          >= 1.2
-                    , tasty-hedgehog >= 1.0
-                    , text           >= 1.2
+
+    build-depends:    base
+
+                      -- Self dependency
                     , nothunks
+
+                      -- Dependencies shared with the lib
+                    , containers
+
+                      -- Whatever is bundled with ghc
+                    , ghc-prim
+
+                      -- Additional dependencies
+                    , hedgehog       >= 1.0 && <= 1.1
+                    , random         >= 1.1 && <= 1.3
+                    , tasty          >= 1.3 && <= 1.4
+                    , tasty-hedgehog >= 1.0 && <= 1.1
+
     hs-source-dirs:   test
     default-language: Haskell2010
     ghc-options:      -Wall
diff --git a/src/NoThunks/Class.hs b/src/NoThunks/Class.hs
--- a/src/NoThunks/Class.hs
+++ b/src/NoThunks/Class.hs
@@ -9,16 +9,17 @@
 {-# LANGUAGE ScopedTypeVariables   #-}
 {-# LANGUAGE StandaloneDeriving    #-}
 {-# LANGUAGE TypeApplications      #-}
+{-# LANGUAGE TypeFamilies          #-}
 {-# LANGUAGE TypeOperators         #-}
 {-# LANGUAGE UndecidableInstances  #-}
-{-# LANGUAGE TypeFamilies          #-}
 
 module NoThunks.Class (
     -- * Check a value for unexpected thunks
     NoThunks(..)
   , ThunkInfo(..)
+  , Context
   , unsafeNoThunks
-    -- * Helpders for defining instances
+    -- * Helpers for defining instances
   , allNoThunks
   , noThunksInValues
   , noThunksInKeysAndValues
@@ -29,6 +30,8 @@
   , InspectHeapNamed(..)
   , AllowThunk(..)
   , AllowThunksIn(..)
+    -- * Generic class
+  , GWNoThunks(..)
   ) where
 
 import Data.Proxy
@@ -46,7 +49,7 @@
 import Data.Foldable (toList)
 import Data.Int
 import Data.IntMap (IntMap)
-import Data.List.NonEmpty (NonEmpty(..))
+import Data.List.NonEmpty (NonEmpty (..))
 import Data.Map (Map)
 import Data.Ratio
 import Data.Sequence (Seq)
@@ -78,11 +81,11 @@
   --
   -- For most datatypes, we should have that
   --
-  -- > noThunks ctxt x == NoThunks
+  -- > noThunks ctxt x == Nothing
   --
   -- if and only if
   --
-  -- > containsThunks x
+  -- > checkContainsThunks x
   --
   -- For some datatypes however, some thunks are expected. For example, the
   -- internal fingertree 'Data.Sequence.Sequence' might contain thunks (this is
@@ -95,12 +98,12 @@
   -- 'noThunks' to force such "expected thunks", as long as it always
   -- reports the /unexpected/ thunks.
   --
-  -- The default implementation of 'noThunks' checks that the argument
-  -- is in WHNF, and if so, adds the type into the context (using 'showTypeOf'),
-  -- and calls 'wNoThunks'. See 'UnexpectedThunkInfo' for a
-  -- detailed discussion of the type context.
+  -- The default implementation of 'noThunks' checks that the argument is in
+  -- WHNF, and if so, adds the type into the context (using 'showTypeOf'), and
+  -- calls 'wNoThunks'. See 'ThunkInfo' for a detailed discussion of the type
+  -- context.
   --
-  -- See also discussion of caveats listed for 'NF.containsThunks'.
+  -- See also discussion of caveats listed for 'checkContainsThunks'.
   noThunks :: Context -> a -> IO (Maybe ThunkInfo)
   noThunks ctxt x = do
       isThunk <- checkIsThunk x
@@ -188,6 +191,7 @@
   deriving (Show)
 
 {-# NOINLINE unsafeNoThunks #-}
+-- | Call 'noThunks' in a pure context (relies on 'unsafePerformIO').
 unsafeNoThunks :: NoThunks a => a -> Maybe ThunkInfo
 unsafeNoThunks a = unsafePerformIO $ noThunks [] a
 
@@ -272,7 +276,7 @@
 -- | Newtype wrapper for use with @deriving via@ to inspect the heap directly
 --
 -- This bypasses the class instances altogether, and inspects the GHC heap
--- directly, checking that the value does not contain any thunks _anywhere_.
+-- directly, checking that the value does not contain any thunks /anywhere/.
 -- Since we can do this without any type classes instances, this is useful for
 -- types that contain fields for which 'NoThunks' instances are not available.
 --
@@ -621,15 +625,15 @@
 
 -- | We do NOT check function closures for captured thunks by default
 --
--- Since we have no type information about the values captured in a thunk,
--- the only check we could possibly do is 'containsThunks': we can't recursively
--- call 'noThunks' on those captured values, which is problematic if
--- any of those captured values /requires/ a custom instance (for example,
--- data types that depend on laziness, such as 'Seq').
+-- Since we have no type information about the values captured in a thunk, the
+-- only check we could possibly do is 'checkContainsThunks': we can't
+-- recursively call 'noThunks' on those captured values, which is problematic if
+-- any of those captured values /requires/ a custom instance (for example, data
+-- types that depend on laziness, such as 'Seq').
 --
 -- By default we therefore /only/ check if the function is in WHNF, and don't
 -- check the captured values at all. If you want a stronger check, you can
--- use @IsNormalForm (a -> b)@ instead.
+-- use @'InspectHeap' (a -> b)@ instead.
 deriving via OnlyCheckWhnfNamed "->" (a -> b) instance NoThunks (a -> b)
 
 -- | We do not check IO actions for captured thunks by default
