diff --git a/Data/Filtrable.hs b/Data/Filtrable.hs
--- a/Data/Filtrable.hs
+++ b/Data/Filtrable.hs
@@ -5,6 +5,9 @@
 import Control.Applicative
 import Control.Monad
 import Data.Bool (bool)
+import Data.Functor.Compose
+import Data.Functor.Product
+import Data.Functor.Sum
 import Data.Proxy
 import Data.Traversable
 
@@ -67,3 +70,13 @@
 
 instance Filtrable (Const a) where
     mapMaybe _ (Const x) = Const x
+
+instance (Filtrable f, Filtrable g) => Filtrable (Product f g) where
+    mapMaybe f (Pair as bs) = Pair (mapMaybe f as) (mapMaybe f bs)
+
+instance (Filtrable f, Filtrable g) => Filtrable (Sum f g) where
+    mapMaybe f (InL as) = InL (mapMaybe f as)
+    mapMaybe f (InR bs) = InR (mapMaybe f bs)
+
+instance (Functor f, Filtrable g) => Filtrable (Compose f g) where
+    mapMaybe f (Compose as) = Compose (mapMaybe f <$> as)
diff --git a/Setup.hs b/Setup.hs
deleted file mode 100644
--- a/Setup.hs
+++ /dev/null
@@ -1,2 +0,0 @@
-import Distribution.Simple
-main = defaultMain
diff --git a/filtrable.cabal b/filtrable.cabal
--- a/filtrable.cabal
+++ b/filtrable.cabal
@@ -1,5 +1,5 @@
 name:                filtrable
-version:             0.1.1.0
+version:             0.1.2.0
 synopsis:            Class of filtrable containers
 homepage:            https://github.com/strake/filtrable.hs
 license:             BSD3
@@ -19,3 +19,10 @@
   build-depends:       base >=4.7 && <5
   default-language:    Haskell2010
   default-extensions:  ConstrainedClassMethods
+  ghc-options:         -Wall -Wcompat -Wredundant-constraints -Wno-name-shadowing
+                       -Wincomplete-record-updates -Wincomplete-uni-patterns
+                       -Werror=incomplete-patterns
+                       -Werror=incomplete-uni-patterns
+                       -Werror=incomplete-record-updates
+                       -Werror=missing-fields
+                       -Werror=missing-methods
