diff --git a/foldl.cabal b/foldl.cabal
--- a/foldl.cabal
+++ b/foldl.cabal
@@ -1,5 +1,5 @@
 Name: foldl
-Version: 1.2.0
+Version: 1.2.1
 Cabal-Version: >=1.8.0.2
 Build-Type: Simple
 License: BSD3
@@ -7,6 +7,7 @@
 Copyright: 2013 Gabriel Gonzalez
 Author: Gabriel Gonzalez
 Maintainer: Gabriel439@gmail.com
+Tested-With: GHC == 7.6.3, GHC == 7.8.4, GHC == 7.10.2, GHC == 8.0.1
 Bug-Reports: https://github.com/Gabriel439/Haskell-Foldl-Library/issues
 Synopsis: Composable, streaming, and efficient left folds
 Description: This library provides strict left folds that stream in constant
@@ -26,7 +27,7 @@
         mwc-random   >= 0.13.1.0 && < 0.14,
         primitive                   < 0.7 ,
         text         >= 0.11.2.0 && < 1.3 ,
-        transformers >= 0.2.0.0  && < 0.5 ,
+        transformers >= 0.2.0.0  && < 0.6 ,
         vector       >= 0.7      && < 0.12,
         containers                  < 0.6 ,
         contravariant               < 1.5 ,
diff --git a/src/Control/Foldl.hs b/src/Control/Foldl.hs
--- a/src/Control/Foldl.hs
+++ b/src/Control/Foldl.hs
@@ -19,7 +19,7 @@
     Taking the sum, the sum of squares, ..., upto the sum of x^5
 
 >>> import Data.Traversable
->>> let powerSums = sequenceA [premap (^n) L.sum | n <- [1..5]]
+>>> let powerSums = sequenceA [L.premap (^n) L.sum | n <- [1..5]]
 >>> L.fold powerSums [1..10]
 [55,385,3025,25333,220825]
 
@@ -109,6 +109,7 @@
     , HandlerM
     , handlesM
     , folded
+    , filtered
 
     -- * Re-exports
     -- $reexports
@@ -172,7 +173,7 @@
 
 instance Functor (Fold a) where
     fmap f (Fold step begin done) = Fold step begin (f . done)
-    {-# INLINABLE fmap #-}
+    {-# INLINE fmap #-}
 
 instance Profunctor Fold where
     lmap = premap
@@ -187,14 +188,14 @@
 
 instance Applicative (Fold a) where
     pure b    = Fold (\() _ -> ()) () (\() -> b)
-    {-# INLINABLE pure #-}
+    {-# INLINE pure #-}
 
     (Fold stepL beginL doneL) <*> (Fold stepR beginR doneR) =
         let step (Pair xL xR) a = Pair (stepL xL a) (stepR xR a)
             begin = Pair beginL beginR
             done (Pair xL xR) = doneL xL (doneR xR)
         in  Fold step begin done
-    {-# INLINABLE (<*>) #-}
+    {-# INLINE (<*>) #-}
 
 instance Monoid b => Monoid (Fold a b) where
     mempty = pure mempty
@@ -557,7 +558,7 @@
 -}
 maximumBy :: (a -> a -> Ordering) -> Fold a (Maybe a)
 maximumBy cmp = _Fold1 max'
-  where 
+  where
     max' x y = case cmp x y of
         GT -> x
         _  -> y
@@ -573,7 +574,7 @@
 -}
 minimumBy :: (a -> a -> Ordering) -> Fold a (Maybe a)
 minimumBy cmp = _Fold1 min'
-  where 
+  where
     min' x y = case cmp x y of
         GT -> y
         _  -> x
@@ -823,11 +824,11 @@
 
 > ofoldlUnwrap
 >     :: MonoFoldable mono
->     => (x -> Element mono -> x) -> x -> (x -> b) -> mono -> b 
+>     => (x -> Element mono -> x) -> x -> (x -> b) -> mono -> b
 >
 > ofoldMUnwrap
 >     :: (Monad m, MonoFoldable mono)
->     => (x -> Element mono -> m x) -> m x -> (x -> m b) -> mono -> m b 
+>     => (x -> Element mono -> m x) -> m x -> (x -> m b) -> mono -> m b
 
     You can wrap these to accept 'Fold' or 'FoldM', too:
 
@@ -990,7 +991,7 @@
 42
 
 >>> fold (handles (filtered even) sum) [1..10]
-42
+30
 
 >>> fold (handles _2 mconcat) [(1,"Hello "),(2,"World"),(3,"!")]
 "Hello World!"
@@ -1060,6 +1061,24 @@
     :: (Contravariant f, Applicative f, Foldable t)
     => (a -> f a) -> (t a -> f (t a))
 folded k ts = contramap (\_ -> ()) (F.traverse_ k ts)
+
+{-|
+>>> fold (handles (filtered even) sum) [1..10]
+30
+
+>>> foldM (handlesM (filtered even) (mapM_ print)) [1..10]
+2
+4
+6
+8
+10
+
+-}
+filtered :: Monoid m => (a -> Bool) -> (a -> m) -> a -> m
+filtered p k x
+    | p x = k x
+    | otherwise = mempty
+{-# INLINABLE filtered #-}
 
 {- $reexports
     @Control.Monad.Primitive@ re-exports the 'PrimMonad' type class
