diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,14 @@
+0.2.0.0
+=======
+
+  * Add a `shouldThrow` expectation, a lensy variant of `shouldThrow`
+
+  * Add a `Test.Hspec.Lens` module, re-exporting `Test.Hspec` with
+`Test.Hspec.Expectations.Lens` expectations
+
+  * More documentation with fake type signatures
+
 0.1.0.0
 =======
 
-`shouldHave`, `shouldNotHave`, `shouldView`, `shouldPreview`, and `shouldList`
+  * `shouldHave`, `shouldNotHave`, `shouldView`, `shouldPreview`, and `shouldList`
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,5 +1,6 @@
 hspec-expectations-lens
 ======
+[![Hackage](https://budueba.com/hackage/hspec-expectations-lens)](http://hackage.haskell.org/package/hspec-expectations-lens)
 [![Build Status](https://secure.travis-ci.org/supki/hspec-expectations-lens.png?branch=master)](http://travis-ci.org/supki/hspec-expectations-lens)
 
 Hspec expectations for the lens stuff
diff --git a/hspec-expectations-lens.cabal b/hspec-expectations-lens.cabal
--- a/hspec-expectations-lens.cabal
+++ b/hspec-expectations-lens.cabal
@@ -1,10 +1,10 @@
 name:                hspec-expectations-lens
-version:             0.1.0.0
+version:             0.2.0.0
 synopsis:            Hspec expectations for the lens stuff
 description:
   Package adds hspec expectations (@\`shouldX\`@ things)
   that work nicely with the "lens" library
-homepage:            https://github.com/supki/hspec-expectations-lens
+homepage:            http://supki.github.io/hspec-expectations-lens/
 license:             BSD3
 license-file:        LICENSE
 author:              Matvey Aksenov
@@ -22,7 +22,7 @@
 
 source-repository this
   type:     git
-  tag:      0.1.0.0
+  tag:      0.2.0.0
   location: https://github.com/supki/hspec-expectations-lens
 
 library
@@ -30,10 +30,13 @@
   hs-source-dirs:      src
   build-depends:
       base                    == 4.*
-    , hspec-expectations
+    , hspec-expectations      >= 0.5
+    , hspec                   >= 1.8
+    , lens                    >= 3.9
     , HUnit
   exposed-modules:
     Test.Hspec.Expectations.Lens
+    Test.Hspec.Lens
 
 test-suite spec
   type:                exitcode-stdio-1.0
diff --git a/src/Test/Hspec/Expectations/Lens.hs b/src/Test/Hspec/Expectations/Lens.hs
--- a/src/Test/Hspec/Expectations/Lens.hs
+++ b/src/Test/Hspec/Expectations/Lens.hs
@@ -1,104 +1,135 @@
-{-# LANGUAGE Rank2Types #-}
 -- | Hspec expectations for the lens stuff
 module Test.Hspec.Expectations.Lens
   ( -- * Expectations
-    shouldHave, shouldNotHave
+    shouldHave
+  , shouldNotHave
   , shouldView
   , shouldPreview
   , shouldList
+  , shouldThrow
   , through
   ) where
 
-import Control.Applicative (Const(..))
-import Data.Monoid (Any(..), First(..), Endo(..))
+import Control.Lens
+import Control.Exception (SomeException)
+import Control.Exception.Lens
+import Data.Monoid (Any(..), All(..), First(..), Endo(..))
 import Test.Hspec.Expectations (Expectation)
-import Test.HUnit (assertBool)
-
-{-# ANN module "HLint: Use camelCase" #-}
+import Test.HUnit (assertBool, assertFailure)
+import Text.Printf (printf)
 
 
-infixl 1 `shouldHave`, `shouldNotHave`, `shouldView`, `shouldPreview`, `shouldList`, `through`
+infixl 1 `shouldHave`, `shouldNotHave`, `shouldView`, `shouldPreview`, `shouldList`, `shouldThrow`, `through`
 
 -- | @x \`shouldHave\` l@ sets the expectation that 'Fold' @l@ has
 -- non-zero number of targets in @x@
-shouldHave
-  :: Show s
-  => s
-  -> ((a -> Const Any a) -> s -> Const Any s)
-  -> Expectation
-x `shouldHave` f = assertBool errorMsg (has f x)
-  where
-    errorMsg = unwords ["Supplied Fold has zero targets for", show x]
+--
+-- @
+-- shouldHave :: 'Show' s => s -> 'Getter'     s a -> 'Expectation'
+-- shouldHave :: 'Show' s => s -> 'Fold'       s a -> 'Expectation'
+-- shouldHave :: 'Show' s => s -> 'Iso''       s a -> 'Expectation'
+-- shouldHave :: 'Show' s => s -> 'Lens''      s a -> 'Expectation'
+-- shouldHave :: 'Show' s => s -> 'Traversal'' s a -> 'Expectation'
+-- shouldHave :: 'Show' s => s -> 'Prism''     s a -> 'Expectation'
+-- @
+shouldHave :: Show s => s -> Getting Any s a -> Expectation
+x `shouldHave` f = assertBool msg (has f x)
+ where
+  msg = printf "Supplied Fold has zero targets for %s" (show x)
 
 -- | @x \`shouldNotHave\` l@ sets the expectation that 'Fold' @l@
 -- has zero targets in @x@
-shouldNotHave
-  :: Show s
-  => s
-  -> ((a -> Const Any a) -> s -> Const Any s)
-  -> Expectation
-x `shouldNotHave` f = assertBool errorMsg (hasn't f x)
-  where
-    errorMsg = unwords ["Supplied Fold has targets for", show x]
+--
+-- @
+-- shouldNotHave :: 'Show' s => s -> 'Getter'     s a -> 'Expectation'
+-- shouldNotHave :: 'Show' s => s -> 'Fold'       s a -> 'Expectation'
+-- shouldNotHave :: 'Show' s => s -> 'Iso''       s a -> 'Expectation'
+-- shouldNotHave :: 'Show' s => s -> 'Lens''      s a -> 'Expectation'
+-- shouldNotHave :: 'Show' s => s -> 'Traversal'' s a -> 'Expectation'
+-- shouldNotHave :: 'Show' s => s -> 'Prism''     s a -> 'Expectation'
+-- @
+shouldNotHave :: Show s => s -> Getting All s a -> Expectation
+x `shouldNotHave` f = assertBool msg (hasn't f x)
+ where
+  msg = printf "Supplied Fold has non-zero targets for %s" (show x)
 
 -- | @x \`shouldView\` y \`through\` l@ sets the expectation that
 -- you can see @y@ in @x@ though a 'Getter' @l@
-shouldView
-  :: (Show s, Show a, Eq a)
-  => s
-  -> a
-  -> ((a -> Const a a) -> s -> Const a s)
-  -> Expectation
-(x `shouldView` y) l = assertBool errorMsg (view l x == y)
-  where
-    errorMsg = unwords ["Can't view", show y, "from", show x, "through supplied Getter"]
+--
+-- @
+-- shouldView ::           ('Show' s, 'Show' a, 'Eq' a) => s -> a -> 'Getter'     s a -> 'Expectation'
+-- shouldView :: ('Data.Monoid.Monoid' m, 'Show' s, 'Show' a, 'Eq' a) => s -> a -> 'Fold'       s m -> 'Expectation'
+-- shouldView ::           ('Show' s, 'Show' a, 'Eq' a) => s -> a -> 'Iso''       s a -> 'Expectation'
+-- shouldView ::           ('Show' s, 'Show' a, 'Eq' a) => s -> a -> 'Lens''      s a -> 'Expectation'
+-- shouldView :: ('Data.Monoid.Monoid' m, 'Show' s, 'Show' a, 'Eq' a) => s -> a -> 'Traversal'' s m -> 'Expectation'
+-- shouldView :: ('Data.Monoid.Monoid' m, 'Show' s, 'Show' a, 'Eq' a) => s -> a -> 'Prism''     s m -> 'Expectation'
+-- @
+shouldView :: (Show s, Show a, Eq a) => s -> a -> Getting a s a -> Expectation
+(x `shouldView` y) l = assertBool msg (view l x == y)
+ where
+  msg = printf "Can't view %s from %s through supplied Getter" (show y) (show x)
 
 -- | @x \`shouldPreview\` y \`through\` l@ sets the expectation that
 -- you can list @y@ in @x@ first though a 'Fold' @l@
-shouldPreview
-  :: (Show s, Show a, Eq a)
-  => s
-  -> a
-  -> ((a -> Const (First a) a) -> s -> Const (First a) s)
-  -> Expectation
-(x `shouldPreview` y) l = assertBool errorMsg (preview l x == Just y)
-  where
-    errorMsg = unwords ["Can't preview", show y, "from", show x, "through supplied Fold"]
+--
+-- @
+-- shouldPreview :: ('Show' s, 'Show' a, 'Eq' a) => s -> a -> 'Getter'     s a -> 'Expectation'
+-- shouldPreview :: ('Show' s, 'Show' a, 'Eq' a) => s -> a -> 'Fold'       s a -> 'Expectation'
+-- shouldPreview :: ('Show' s, 'Show' a, 'Eq' a) => s -> a -> 'Lens''      s a -> 'Expectation'
+-- shouldPreview :: ('Show' s, 'Show' a, 'Eq' a) => s -> a -> 'Iso''       s a -> 'Expectation'
+-- shouldPreview :: ('Show' s, 'Show' a, 'Eq' a) => s -> a -> 'Traversal'' s a -> 'Expectation'
+-- shouldPreview :: ('Show' s, 'Show' a, 'Eq' a) => s -> a -> 'Prism''     s a -> 'Expectation'
+-- @
+shouldPreview :: (Show s, Show a, Eq a) => s -> a -> Getting (First a) s a -> Expectation
+(x `shouldPreview` y) l = assertBool msg (preview l x == Just y)
+ where
+  msg = printf "Can't preview %s from %s through supplied Fold" (show y) (show x)
 
 -- | @x \`shouldList\` ys \`through\` l@ sets the expectation that
 -- you can list @ys@ in @x@ though a 'Fold' @l@
-shouldList
-  :: (Show s, Show a, Eq a)
-  => s
-  -> [a]
-  -> ((a -> Const (Endo [a]) a) -> s -> Const (Endo [a]) s)
-  -> Expectation
-(x `shouldList` y) l = assertBool errorMsg (toListOf l x == y)
-  where
-    errorMsg = unwords ["Can't list", show y, "from", show x, "through supplied Fold"]
+--
+-- @
+-- shouldList :: ('Show' s, 'Show' a, 'Eq' a) => s -> [a] -> 'Getter'     s a -> 'Expectation'
+-- shouldList :: ('Show' s, 'Show' a, 'Eq' a) => s -> [a] -> 'Fold'       s a -> 'Expectation'
+-- shouldList :: ('Show' s, 'Show' a, 'Eq' a) => s -> [a] -> 'Lens''      s a -> 'Expectation'
+-- shouldList :: ('Show' s, 'Show' a, 'Eq' a) => s -> [a] -> 'Iso''       s a -> 'Expectation'
+-- shouldList :: ('Show' s, 'Show' a, 'Eq' a) => s -> [a] -> 'Traversal'' s a -> 'Expectation'
+-- shouldList :: ('Show' s, 'Show' a, 'Eq' a) => s -> [a] -> 'Prism''     s a -> 'Expectation'
+-- @
+shouldList :: (Show s, Show a, Eq a) => s -> [a] -> Getting (Endo [a]) s a -> Expectation
+(x `shouldList` y) l = assertBool msg (toListOf l x == y)
+ where
+  msg = printf "Can't list %s from %s through supplied Fold" (show y) (show x)
 
+-- | @x \`shouldthrow\` l@ sets the expectation that
+-- @x@ throws an exception catchable with a 'Fold' @l@
+--
+-- /Note:/ name conflicts with 'Test.Hspec.Expectations.shouldThrow'
+--
+-- @
+-- shouldThrow :: 'IO' a -> -> 'Getter'     s b -> 'Expectation'
+-- shouldThrow :: 'IO' a -> -> 'Fold'       s b -> 'Expectation'
+-- shouldThrow :: 'IO' a -> -> 'Lens''      s b -> 'Expectation'
+-- shouldThrow :: 'IO' a -> -> 'Iso''       s b -> 'Expectation'
+-- shouldThrow :: 'IO' a -> -> 'Traversal'' s b -> 'Expectation'
+-- shouldThrow :: 'IO' a -> -> 'Prism''     s b -> 'Expectation'
+-- @
+shouldThrow :: IO a -> Getting (First b) SomeException b -> Expectation
+x `shouldThrow` l = do
+  r <- trying l x
+  case r of
+    Left  _ -> return ()
+    Right _ -> assertFailure "Couldn't catch any exceptions with the supplied Fold"
+
 -- | A helper to fight parentheses
 --
 -- @
 -- through ≡ id
 -- @
+--
+-- @
+-- through :: 'Int' -> 'Int'
+-- through :: 'Char' -> 'Char'
+-- @
 through :: a -> a
 through = id
-
-has :: ((a -> Const Any b) -> s -> Const Any t) -> s -> Bool
-has l = getAny . foldMapOf l (\_ -> Any True)
-
-hasn't :: ((a -> Const Any b) -> s -> Const Any t) -> s -> Bool
-hasn't l = not . has l
-
-view :: ((a -> Const a a) -> s -> Const a s) -> s -> a
-view l = foldMapOf l id
-
-preview :: ((a -> Const (First a) a) -> s -> Const (First a) s) -> s -> Maybe a
-preview l s = getFirst (foldMapOf l (First . Just) s)
-
-toListOf :: ((a -> Const (Endo [a]) a) -> s -> Const (Endo [a]) s) -> s -> [a]
-toListOf l s = appEndo (foldMapOf l (\x -> Endo (x :)) s) []
-
-foldMapOf :: ((a -> Const m b) -> s -> Const n t) -> (a -> m) -> s -> n
-foldMapOf l f = getConst . l (Const . f)
diff --git a/src/Test/Hspec/Lens.hs b/src/Test/Hspec/Lens.hs
new file mode 100644
--- /dev/null
+++ b/src/Test/Hspec/Lens.hs
@@ -0,0 +1,28 @@
+-- | Module is designed to be conveniently imported instead of "Test.Hspec"
+--
+-- It reexports "Test.Hspec" without expectations (except for `shouldBe`)
+-- and "Test.Hspec.Expectations.Lens" expectations
+module Test.Hspec.Lens
+  ( -- * Types
+    Spec
+  , Example
+    -- * Setting expectations
+  , shouldBe
+  , module Test.Hspec.Expectations.Lens
+    -- * Defining a spec
+  , describe
+  , context
+  , it
+  , example
+  , pending
+  , pendingWith
+  , before
+  , after
+  , around
+  , parallel
+    -- * Running a spec
+  , hspec
+  ) where
+
+import Test.Hspec
+import Test.Hspec.Expectations.Lens
