diff --git a/hs-inspector.cabal b/hs-inspector.cabal
--- a/hs-inspector.cabal
+++ b/hs-inspector.cabal
@@ -2,7 +2,7 @@
 --  http://haskell.org/cabal/users-guide/
 
 name:                hs-inspector
-version:             0.3.0.0
+version:             0.4.0.0
 license:             MIT
 license-file:        LICENSE
 author:              Franco Leonardo Bulgarelli
@@ -21,9 +21,10 @@
   hs-source-dirs:
       src
   exposed-modules:
-    Language.Haskell.Inspector.Smell
     Language.Haskell.Explorer
+    Language.Haskell.Detector
     Language.Haskell.Inspector
+    Language.Haskell.Inspector.Smell
   build-depends:
     base                      >= 4     && < 5,
     haskell-src               >= 1     && < 1.1
diff --git a/src/Language/Haskell/Detector.hs b/src/Language/Haskell/Detector.hs
new file mode 100644
--- /dev/null
+++ b/src/Language/Haskell/Detector.hs
@@ -0,0 +1,16 @@
+module Language.Haskell.Detector (detect) where
+
+import Language.Haskell.Inspector
+import Language.Haskell.Syntax
+
+bindingsOf :: Code -> [String]
+bindingsOf = orNil . withCode (concatMap bindings)
+  where
+  bindings (HsTypeSig _ [b] _) = [nameOf b]
+  bindings (HsTypeDecl _ b _ _) = [nameOf b]
+  bindings (HsPatBind _ (HsPVar n) _ _) = [nameOf n]
+  bindings (HsFunBind cases)  = map bindingInMatch cases
+  bindings _                  = []
+
+detect :: Inspection -> Code -> [Binding]
+detect inspection code = filter (`inspection` code) $ bindingsOf code
diff --git a/src/Language/Haskell/Inspector.hs b/src/Language/Haskell/Inspector.hs
--- a/src/Language/Haskell/Inspector.hs
+++ b/src/Language/Haskell/Inspector.hs
@@ -57,13 +57,10 @@
         f (E (HsVar    name)) = isTarget name
         f _ = False
 
-        isTarget (Qual  _ n) = isTarget' n
-        isTarget (UnQual  n) = isTarget' n
+        isTarget (Qual  _ n) = isName target n
+        isTarget (UnQual  n) = isName target n
         isTarget _           = False
 
-        isTarget' (HsSymbol t) = t == target
-        isTarget' (HsIdent  t) = t == target
-
 -- | Inspection that tells whether a binding uses lists comprehensions
 -- in its definition
 hasComprehension :: Inspection
@@ -75,11 +72,31 @@
 hasBinding :: Inspection
 hasBinding binding = isJust . findBindingRhs binding
 
+hasTypeDeclaration :: Inspection
+hasTypeDeclaration binding = testWithCode (any f)
+  where f (HsTypeDecl _ hsName _ _) = isName binding hsName
+        f _                         = False
+
+hasTypeSignature :: Inspection
+hasTypeSignature binding = testWithCode (any f)
+  where f (HsTypeSig _ [hsName] _)  = isName binding hsName
+        f _                         = False
+
 isParseable :: Code -> Bool
 isParseable = testWithCode (const True)
 
+negateInspection :: Inspection -> Inspection
+negateInspection f code = not . f code
+
 -- ===================================================
 
+isName name hsName = nameOf hsName == name
+
+nameOf (HsSymbol n) = n
+nameOf (HsIdent  n) = n
+
+bindingInMatch (HsMatch _ n _ _ _) = nameOf n
+
 isBindingEO f = isBindingRhs isExpr
   where isExpr rhs = exploreExprs f $ topExprs rhs
 
@@ -92,13 +109,10 @@
 withBindingRhs f binding = fmap f . findBindingRhs binding
 
 findBindingRhs binding = fmap rhsForBinding . join . withCode (find isBinding)
-  where isBinding (HsPatBind _ (HsPVar (HsIdent name))  _ _) = name == binding
-        isBinding (HsFunBind cases)  = any isBindingInMatch cases
+  where isBinding (HsPatBind _ (HsPVar n)  _ _) = nameOf n == binding
+        isBinding (HsFunBind cases)  = any ((== binding).bindingInMatch) cases
         isBinding _ = False
 
-        isBindingInMatch (HsMatch _ (HsIdent name) _ _ _ ) = name == binding
-        isBindingInMatch _ = False
-
 rhsForBinding :: HsDecl -> [HsRhs]
 rhsForBinding (HsPatBind _ _ rhs localDecls) = concatRhs rhs localDecls
 rhsForBinding (HsFunBind cases) = cases >>= \(HsMatch _ _ _ rhs localDecls) -> concatRhs rhs localDecls
@@ -113,4 +127,5 @@
                 | otherwise = Nothing
 
 orFalse = fromMaybe False
+orNil = fromMaybe []
 
diff --git a/src/Language/Haskell/Inspector/Smell.hs b/src/Language/Haskell/Inspector/Smell.hs
--- a/src/Language/Haskell/Inspector/Smell.hs
+++ b/src/Language/Haskell/Inspector/Smell.hs
@@ -1,4 +1,8 @@
-module Language.Haskell.Inspector.Smell where
+module Language.Haskell.Inspector.Smell (
+  hasRedundantBooleanComparison,
+  hasRedundantIf,
+  hasRedundantGuards,
+  hasRedundantLambda) where
 
 import Language.Haskell.Explorer
 import Language.Haskell.Syntax
