diff --git a/Numeric/Minimization/QuadProgPP.hs b/Numeric/Minimization/QuadProgPP.hs
--- a/Numeric/Minimization/QuadProgPP.hs
+++ b/Numeric/Minimization/QuadProgPP.hs
@@ -1,7 +1,10 @@
 {-# LANGUAGE BangPatterns #-}
 {-# LANGUAGE ViewPatterns #-}
 {-# LANGUAGE ForeignFunctionInterface #-}
-module Numeric.Minimization.QuadProgPP (solveQuadProg) where
+module Numeric.Minimization.QuadProgPP
+    ( solveQuadProg
+    , QuadProgPPError(..)
+    ) where
 
 import Control.Applicative
 import Control.Monad
@@ -17,6 +20,18 @@
 import Foreign.Storable
 import System.IO.Unsafe (unsafePerformIO)
 
+-- | Errors that can happen in 'solveQuadProg'.
+data QuadProgPPError
+    = QuadProgInfeasible
+        -- ^ The problem has no feasible solution.
+    | QuadProgSizeMismatch
+        -- ^ The given matrices and vectors have inconsistent
+        -- dimensionalities.
+    | QuadProgOtherError String
+        -- ^ Other errors. Currently this is used for C++ exceptions
+        -- thrown by QuadProg++.
+    deriving (Show, Eq)
+
 -- | Solve a strictly convex quadratic program with optional linear
 -- constraints. It returns a pair of the optimal solution and the
 -- value of the objective function at that point. On error it returns
@@ -35,7 +50,7 @@
         -- ^ Optional inequality constraints. When given, this
         -- argument should be of the form @Just (E, F)@, which
         -- represents linear inequalities @x -> x'E + F >= 0@.
-    -> Either String (Vector Double, Double)
+    -> Either QuadProgPPError (Vector Double, Double)
 solveQuadProg (g, g0) (split -> (ce, ce0)) (split -> (ci, ci0))
         = unsafePerformIO $
     mat' (Just g) $ \gRow gCol gPtr ->
@@ -44,7 +59,7 @@
     vec' ce0 $ \ce0Size ce0Ptr ->
     mat' (trans <$> ci) $ \ciRow ciCol ciPtr ->
     vec' ci0 $ \ci0Size ci0Ptr ->
-    fromMaybe (return $ Left sizeMismatchError) $ do
+    fromMaybe (return $ Left QuadProgSizeMismatch) $ do
         let !nVar = gRow
         guard $ gCol == nVar
         guard $ g0Size == nVar
@@ -64,22 +79,21 @@
                     ptrSolution
                     ptrErrorStr
             errorCStr <- peek ptrErrorStr
-            if errorCStr == nullPtr -- success
-                then let
-                    !solutionVec = VS.unsafeFromForeignPtr0 fpSolution
-                        (fromIntegral nVar)
-                    in return $ Right (solutionVec, best)
-                else do
-                    errorStr <- peekCAString errorCStr
-                    free errorCStr
-                    return $ Left errorStr
+            case () of
+                _   | errorCStr /= nullPtr -> do -- exception
+                        errorStr <- peekCAString errorCStr
+                        free errorCStr
+                        return $ Left $ QuadProgOtherError errorStr
+                    | best == (1/0) -> return $ Left QuadProgInfeasible
+                    | otherwise -> let
+                        !solutionVec = VS.unsafeFromForeignPtr0 fpSolution
+                            (fromIntegral nVar)
+                        in return $ Right (solutionVec, best)
     where
         mat' (Just m) f = mat (cmat m) $ \church -> church $ \nrow ncol ptr -> f nrow ncol ptr
         mat' Nothing f = f 0 0 nullPtr
         vec' (Just v) f = vec v $ \church -> church $ \size ptr -> f size ptr
         vec' Nothing f = f 0 nullPtr
-        sizeMismatchError =
-            "Numeric.Minimization.QuadProgPP.solveQuadProg: size mismatch"
 
 split :: Maybe (a, b) -> (Maybe a, Maybe b)
 split x = (fst <$> x, snd <$> x)
diff --git a/hmatrix-quadprogpp.cabal b/hmatrix-quadprogpp.cabal
--- a/hmatrix-quadprogpp.cabal
+++ b/hmatrix-quadprogpp.cabal
@@ -2,8 +2,8 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                hmatrix-quadprogpp
-version:             0.1.0.0
-synopsis:            Bindings to QuadProg++
+version:             0.2.0.1
+synopsis:            Bindings to the QuadProg++ quadratic programming library
 description:
   Bindings to QuadProg++, a C++ library for quadratic programming.
   <http://sourceforge.net/projects/quadprog/>
@@ -21,8 +21,9 @@
   location: https://github.com/alang9/hmatrix-quadprogpp.git
 
 library
+  ghc-options:         -Wall
   c-sources: c++/binding.cxx
   exposed-modules:     Numeric.Minimization.QuadProgPP
   -- other-modules:       
-  build-depends:       base ==4.5.*, vector >= 0.9, hmatrix >= 0.14
+  build-depends:       base >= 4.5 && < 4.7, vector >= 0.9, hmatrix >= 0.14
   extra-libraries:  QuadProgpp, stdc++
