diff --git a/Data/Function/Predicate.hs b/Data/Function/Predicate.hs
new file mode 100644
--- /dev/null
+++ b/Data/Function/Predicate.hs
@@ -0,0 +1,29 @@
+{-# LANGUAGE UnicodeSyntax #-}
+
+-- | Provides a couple of convenience functions to be used for forming predicates. 
+module Data.Function.Predicate
+(is,isn't,equals)
+where
+
+-- |An example will explain this more than anything:
+--
+-- > listsLongerThan3Elements :: [[a]] -> [[a]]
+-- > listsLongerThan3Elements = filter (length `is` (>3))
+is :: (a → b) → (b → Bool) → (a → Bool)
+is = flip (.)
+
+-- |The inverse of 'is'.
+--
+-- > listsShorterThanFourElements = filter (length `isn't` (>3))
+isn't :: (a → b) → (b → Bool) → (a → Bool)
+isn't p x y = not $ (p `is` x) y
+
+-- |This is 'is' with a fixed equality condition.
+--
+-- Example:
+-- 
+-- > data Color = White | Black deriving (Eq)
+-- > data ChessPiece = { color :: Color, name :: String }
+-- > whitePieces = filter (color `equals` White)
+equals :: (Eq b) ⇒ (a → b) → b → a → Bool
+equals p y x = p x == y
diff --git a/Setup.lhs b/Setup.lhs
new file mode 100644
--- /dev/null
+++ b/Setup.lhs
@@ -0,0 +1,4 @@
+#! /usr/bin/env runhaskell
+
+> import Distribution.Simple
+> main = defaultMain
diff --git a/predicates.cabal b/predicates.cabal
new file mode 100644
--- /dev/null
+++ b/predicates.cabal
@@ -0,0 +1,13 @@
+Name: predicates
+Version: 0.1
+Synopsis: A couple of convenience functions for forming predicates.
+License: BSD3
+Author: George Pollard
+Maintainer: George Pollard <porges@porg.es>
+Build-Depends: base
+Exposed-modules: Data.Function.Predicate
+Build-Type: Simple
+Category: Combinators
+Description: A couple of convenience functions for forming predicates (currently 'is', 'isn't', and 'equals'). Also my first library as a test ;)
+Extensions: UnicodeSyntax
+Cabal-Version: >= 1.2.3
