diff --git a/Git/Types.hs b/Git/Types.hs
--- a/Git/Types.hs
+++ b/Git/Types.hs
@@ -9,6 +9,7 @@
 import           Control.Applicative
 import           Control.Exception
 import           Control.Monad
+import           Control.Monad.Fail (MonadFail)
 import           Control.Monad.Trans.State
 import           Data.ByteString (ByteString)
 import qualified Data.ByteString.Base16 as B16
@@ -137,11 +138,11 @@
 shaToText :: SHA -> Text
 shaToText (SHA bs) = T.decodeUtf8 (B16.encode bs)
 
-textToSha :: Monad m => Text -> m SHA
+textToSha :: MonadFail m => Text -> m SHA
 textToSha t =
     case B16.decode $ T.encodeUtf8 t of
-        (bs, "") -> return (SHA bs)
-        _ -> fail "Invalid base16 encoding"
+        Right bs -> return (SHA bs)
+        Left err -> fail $ "Invalid base16 encoding: " ++ err
 
 instance IsOid SHA where
     renderOid = shaToText
diff --git a/gitlib.cabal b/gitlib.cabal
--- a/gitlib.cabal
+++ b/gitlib.cabal
@@ -1,5 +1,5 @@
 Name:          gitlib
-Version:       3.1.2
+Version:       3.1.3
 Synopsis:      API library for working with Git repositories
 License-file:  LICENSE
 License:       MIT
