diff --git a/prolog.cabal b/prolog.cabal
--- a/prolog.cabal
+++ b/prolog.cabal
@@ -1,5 +1,5 @@
 Name:                prolog
-Version:             0.3
+Version:             0.3.1
 Synopsis:            A Prolog interpreter written in Haskell.
 Description:         A Prolog interpreter written in Haskell. Implements a subset of the Prolog language.
 License:             PublicDomain
@@ -7,7 +7,7 @@
 Maintainer:          Marcel Fourné (haskell@marcelfourne.de)
 Category:            Language
 Build-type:          Simple
-Cabal-version:       >=1.6
+Cabal-version:       >=1.10
 
 Library
   Exposed-modules: Language.Prolog
@@ -22,6 +22,7 @@
                    IsString
                    Quote
   Hs-Source-Dirs:  src
+  Default-Language: Haskell98
 
   Build-depends:
     base >=4 && <5,
diff --git a/src/Quote.hs b/src/Quote.hs
--- a/src/Quote.hs
+++ b/src/Quote.hs
@@ -9,6 +9,7 @@
 import Language.Haskell.TH.Lift (deriveLiftMany)
 import Language.Haskell.TH.Quote (QuasiQuoter(..))
 import Text.Parsec (parse, eof, ParsecT)
+import Text.Parsec.String (Parser)
 import Data.Generics (extQ, typeOf, Data)
 
 import Prolog ( Term(..), VariableName, Clause(..), Goal
@@ -26,14 +27,15 @@
 c  = prologQuasiQuoter clause  "clause"
 pl = prologQuasiQuoter program "program"
 
+prologQuasiQuoter :: (Data a, Lift a) => Parser a -> String -> QuasiQuoter
 prologQuasiQuoter parser name =
    QuasiQuoter { quoteExp  = parsePrologExp parser name
                , quotePat  = parsePrologPat parser name
-               , quoteType = fail ("Prolog "++ name ++"s can't be Haskell types!")
-               , quoteDec  = fail ("Prolog "++ name ++"s can't be Haskell declarations!")
+               , quoteType = \ _ -> fail ("Prolog "++ name ++"s can't be Haskell types!")
+               , quoteDec  = \ _ -> fail ("Prolog "++ name ++"s can't be Haskell declarations!")
                }
 
-parsePrologExp :: (Data a, Lift a) => ParsecT [Char] () Identity a -> String -> String -> Q Exp
+parsePrologExp :: (Data a, Lift a) => Parser a -> String -> String -> Q Exp
 parsePrologExp parser name str = do
    case parse (whitespace >> parser <* eof) ("(Prolog " ++ name ++ " expression)") str of
       Right x -> const (fail $ "Quasi-quoted expressions of type " ++ show (typeOf x) ++ " are not implemented.")
@@ -56,7 +58,7 @@
       fail "Clauses using Haskell functions are not quasi-quotable."
 
 
-parsePrologPat :: (Data a, Lift a) => ParsecT [Char] () Identity a -> String -> String -> Q Pat
+parsePrologPat :: (Data a, Lift a) => Parser a -> String -> String -> Q Pat
 parsePrologPat parser name str = do
    case parse (whitespace >> parser <* eof) ("(Prolog " ++ name ++ " pattern)") str of
       Right x -> viewP [e| (== $(lift x)) |] [p| True |]
diff --git a/src/Unifier.hs b/src/Unifier.hs
--- a/src/Unifier.hs
+++ b/src/Unifier.hs
@@ -5,7 +5,7 @@
    )
 where
 
-import Control.Monad (MonadPlus, mzero)
+import Control.Monad (MonadFail, mzero)
 import Control.Arrow (second)
 import Data.Function (fix)
 import Data.Generics (everything, mkQ)
@@ -16,7 +16,7 @@
 type Substitution = (VariableName, Term)
 
 
-unify, unify_with_occurs_check :: MonadPlus m => Term -> Term -> m Unifier
+unify, unify_with_occurs_check :: MonadFail m => Term -> Term -> m Unifier
 
 unify = fix unify'
 
@@ -34,7 +34,7 @@
 unify' _ t (Var v)  = return [(v,t)]
 unify' self (Struct a1 ts1) (Struct a2 ts2) | a1 == a2 && same length ts1 ts2 =
     unifyList self (zip ts1 ts2)
-unify' _ _ _ = mzero
+unify' _ _ _ = fail "unify'"
 
 same :: Eq b => (a -> b) -> a -> a -> Bool
 same f x y = f x == f y
