diff --git a/JSON-Combinator.cabal b/JSON-Combinator.cabal
--- a/JSON-Combinator.cabal
+++ b/JSON-Combinator.cabal
@@ -1,5 +1,5 @@
 Name:               JSON-Combinator
-Version:            0.2.4
+Version:            0.2.5
 License:            BSD3
 License-File:       LICENSE
 Author:             Tony Morris <ʇǝu˙sıɹɹoɯʇ@ןןǝʞsɐɥ>
diff --git a/Text/JSON/Failure.hs b/Text/JSON/Failure.hs
--- a/Text/JSON/Failure.hs
+++ b/Text/JSON/Failure.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE RankNTypes, DeriveDataTypeable #-}
+{-# LANGUAGE DeriveDataTypeable #-}
 
 -- | Data structures that used to denote failure of accessing JSON values.
 module Text.JSON.Failure
@@ -44,6 +44,10 @@
   ExpectedString j
   deriving (Eq, Ord, Show, Data, Typeable)
 
+-- | An object field was attempted to access but the object has no such field or
+-- the JSON value was expected to be an object but it wasn't.
 data NoSuchFieldOrExpectedObject z j =
-  NoSuchFieldOrExpectedObject (forall x. (NoSuchField z -> x) -> (ExpectedObject j -> x) -> x)
+  NoSuchFieldOrExpectedObject_NoSuchField z
+  | NoSuchFieldOrExpectedObject_ExpectedObject j
+  deriving (Eq, Ord, Show, Data, Typeable)
 
diff --git a/Text/JSON/JSONField.hs b/Text/JSON/JSONField.hs
--- a/Text/JSON/JSONField.hs
+++ b/Text/JSON/JSONField.hs
@@ -38,10 +38,10 @@
 instance JSONField JSON ByteString where
   field f (Object o) =
     case T.lookup f o of
-      Nothing -> failure (NoSuchFieldOrExpectedObject (\x _ -> x (NoSuchField f)) :: NoSuchFieldOrExpectedObject ByteString JSON)
+      Nothing -> failure (NoSuchFieldOrExpectedObject_NoSuchField f :: NoSuchFieldOrExpectedObject ByteString JSON)
       Just x  -> return x
   field _ j =
-    failure (NoSuchFieldOrExpectedObject (\_ y -> y (ExpectedObject j)) :: NoSuchFieldOrExpectedObject ByteString JSON)
+    failure (NoSuchFieldOrExpectedObject_ExpectedObject j :: NoSuchFieldOrExpectedObject ByteString JSON)
   fields (Object o) =
     return (T.keys o)
   fields j =
@@ -54,10 +54,10 @@
 instance JSONField J.JSValue [Char] where
   field f (J.JSObject (JSONObject o)) =
     case lookup f o of
-      Nothing -> failure (NoSuchFieldOrExpectedObject (\x _ -> x (NoSuchField f)) :: NoSuchFieldOrExpectedObject String J.JSValue)
+      Nothing -> failure (NoSuchFieldOrExpectedObject_NoSuchField f :: NoSuchFieldOrExpectedObject String J.JSValue)
       Just x  -> return x
   field _ j =
-    failure (NoSuchFieldOrExpectedObject (\_ y -> y (ExpectedObject j)) :: NoSuchFieldOrExpectedObject String J.JSValue)
+    failure (NoSuchFieldOrExpectedObject_ExpectedObject j :: NoSuchFieldOrExpectedObject String J.JSValue)
   fields (J.JSObject (JSONObject o)) =
     return (fmap fst o)
   fields j =
@@ -70,10 +70,10 @@
 instance JSONField H.Json [Char] where
   field f (H.JObject o) =
     case M.lookup f o of
-      Nothing -> failure (NoSuchFieldOrExpectedObject (\x _ -> x (NoSuchField f)) :: NoSuchFieldOrExpectedObject String H.Json)
+      Nothing -> failure (NoSuchFieldOrExpectedObject_NoSuchField f :: NoSuchFieldOrExpectedObject String H.Json)
       Just x  -> return x
   field _ j =
-    failure (NoSuchFieldOrExpectedObject (\_ y -> y (ExpectedObject j)) :: NoSuchFieldOrExpectedObject String H.Json)
+    failure (NoSuchFieldOrExpectedObject_ExpectedObject j :: NoSuchFieldOrExpectedObject String H.Json)
   fields (H.JObject o) =
     return (M.keys o)
   fields j =
