diff --git a/Control/Failure.hs b/Control/Failure.hs
--- a/Control/Failure.hs
+++ b/Control/Failure.hs
@@ -7,11 +7,8 @@
 {-# LANGUAGE FlexibleContexts #-}
 -- | Type classes for returning failures.
 module Control.Failure
-    ( -- * Type classes
+    ( -- * Type class
       Failure (..)
-    , FunctorFailure
-    , ApplicativeFailure
-    , MonadFailure
       -- * Wrapping failures
     , WrapFailure (..)
       -- * Convenience 'String' failure
@@ -26,20 +23,10 @@
 import Prelude hiding (catch)
 import Control.Exception (throw, catch, Exception, SomeException (..))
 import Data.Typeable (Typeable)
-import Control.Applicative (Applicative (..))
 
-class Failure e f where
+class Monad f => Failure e f where
     failure :: e -> f v
-class (Functor f, Failure e f) => FunctorFailure e f
-class (Applicative f, Failure e f) => ApplicativeFailure e f
-class (Monad f, Applicative f, Failure e f) => MonadFailure e f
 
--- These introduce the need to use undecidables.
--- However, since they are merely type class synonyms, this is acceptable.
-instance (Functor f, Failure e f) => FunctorFailure e f
-instance (Applicative f, Failure e f) => ApplicativeFailure e f
-instance (Monad f, Applicative f, Failure e f) => MonadFailure e f
-
 class Failure e f => WrapFailure e f where
     -- | Wrap the failure value, if any, with the given function. This is
     -- useful in particular when you want all the exceptions returned from a
@@ -53,7 +40,7 @@
 class Try f where
   type Error f
   -- Turn a concrete failure into an abstract failure
-  try :: ApplicativeFailure (Error f) f' => f a -> f' a
+  try :: Failure (Error f) f' => f a -> f' a
 
 -- | Call 'failure' with a 'String'.
 failureString :: Failure StringException m => String -> m a
@@ -75,7 +62,7 @@
 instance Exception e => Failure e IO where
   failure = Control.Exception.throw
 
-instance Failure e (Either e) where failure = Left
+-- not a monad or applicative instance Failure e (Either e) where failure = Left
 
 data NothingException = NothingException
   deriving (Show, Typeable)
@@ -84,12 +71,12 @@
 instance Try Maybe where
   type Error Maybe = NothingException
   try Nothing      = failure NothingException
-  try (Just x)     = pure x
+  try (Just x)     = return x
 
 instance Try (Either e) where
   type Error (Either e) = e
   try (Left  e)         = failure e
-  try (Right x)         = pure x
+  try (Right x)         = return x
 
 data NullException = NullException
   deriving (Show, Typeable)
@@ -98,4 +85,4 @@
 instance Try [] where
   type Error [] = NullException
   try []        = failure NullException
-  try (x:_)     = pure x
+  try (x:_)     = return x
diff --git a/failure.cabal b/failure.cabal
--- a/failure.cabal
+++ b/failure.cabal
@@ -1,5 +1,5 @@
 name: failure
-version: 0.0.0.3
+version: 0.1.0
 Cabal-Version:  >= 1.6
 build-type: Simple
 license: PublicDomain
