diff --git a/Data/Filtrable.hs b/Data/Filtrable.hs
--- a/Data/Filtrable.hs
+++ b/Data/Filtrable.hs
@@ -1,4 +1,4 @@
-module Data.Filtrable where
+module Data.Filtrable (Filtrable (..)) where
 
 import Prelude hiding (filter)
 
@@ -33,11 +33,31 @@
     catMaybes = mapMaybe id
 
     filter :: (a -> Bool) -> f a -> f a
-    filter f = mapMaybe (liftA2 (<$) id (guard . f))
+    filter f = mapMaybe ((<$) <*> guard . f)
 
+    mapMaybeA :: (Traversable f, Applicative p) => (a -> p (Maybe b)) -> f a -> p (f b)
+    mapMaybeA f xs = catMaybes <$> traverse f xs
+
+    filterA :: (Traversable f, Applicative p) => (a -> p Bool) -> f a -> p (f a)
+    filterA f = mapMaybeA (\ x -> (x <$) . guard <$> f x)
+
+    mapEither :: (a -> Either b c) -> f a -> (f b, f c)
+    mapEither f = (,) <$> mapMaybe (either Just (pure Nothing) . f)
+                      <*> mapMaybe (either (pure Nothing) Just . f)
+
+    mapEitherA :: (Traversable f, Applicative p) => (a -> p (Either b c)) -> f a -> p (f b, f c)
+    mapEitherA f = liftA2 (,) <$> mapMaybeA (fmap (Just `either` pure Nothing) . f)
+                              <*> mapMaybeA (fmap (pure Nothing `either` Just) . f)
+
+    partitionEithers :: f (Either a b) -> (f a, f b)
+    partitionEithers = mapEither id
+
 instance Filtrable [] where
     mapMaybe f = foldr (maybe id (:) . f) []
 
+    mapMaybeA _ [] = pure []
+    mapMaybeA f (x:xs) = maybe id (:) <$> f x <*> mapMaybeA f xs
+
 instance Filtrable Maybe where
     mapMaybe = (=<<)
     catMaybes = join
@@ -47,9 +67,3 @@
 
 instance Filtrable (Const a) where
     mapMaybe _ (Const x) = Const x
-
-mapMaybeA :: (Filtrable f, Traversable f, Applicative p) => (a -> p (Maybe b)) -> f a -> p (f b)
-mapMaybeA f xs = catMaybes <$> traverse f xs
-
-filterA :: (Filtrable f, Traversable f, Applicative p) => (a -> p Bool) -> f a -> p (f a)
-filterA f = mapMaybeA (\ x -> (x <$) . guard <$> f x)
diff --git a/filtrable.cabal b/filtrable.cabal
--- a/filtrable.cabal
+++ b/filtrable.cabal
@@ -1,5 +1,5 @@
 name:                filtrable
-version:             0.1.0.5
+version:             0.1.1.0
 synopsis:            Class of filtrable containers
 homepage:            https://github.com/strake/filtrable.hs
 license:             BSD3
@@ -8,8 +8,14 @@
 maintainer:          strake888@gmail.com
 category:            Data
 build-type:          Simple
-cabal-version:       >=1.9.2
+cabal-version:       >=1.10
+tested-with:         GHC ==7.8.*,
+                     GHC ==7.10.*,
+                     GHC ==7.12.*,
+                     GHC ==8.0.*
 
 library
   exposed-modules:     Data.Filtrable
-  build-depends:       base >=4.7 && <4.9
+  build-depends:       base >=4.7 && <5
+  default-language:    Haskell2010
+  default-extensions:  ConstrainedClassMethods
