diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # Revision history
 
+## 0.2.0.0 -- 2021-03-19
+
+- Use `MonadFail` as interface.
+
 ## 0.1.0.0 -- 2020-06-29
 
 - Released.
diff --git a/postgresql-placeholder-converter.cabal b/postgresql-placeholder-converter.cabal
--- a/postgresql-placeholder-converter.cabal
+++ b/postgresql-placeholder-converter.cabal
@@ -1,7 +1,7 @@
 cabal-version:       2.2
 
 name:                postgresql-placeholder-converter
-version:             0.1.0.0
+version:             0.2.0.0
 author:              Kazuki Okamoto
 copyright:           2020 Kazuki Okamoto, 2019 IIJ Innovation Institute Inc.
 license:             BSD-3-Clause
@@ -19,7 +19,7 @@
                      CHANGELOG.md
 
 common common
-  build-depends:       base >= 4.12 && < 4.15
+  build-depends:       base >= 4.11 && < 4.15
   default-language:    Haskell2010
 
 library
@@ -29,6 +29,7 @@
   other-modules:       Database.PostgreSQL.Placeholder.Convert.QuestionToDollar
   build-depends:       attoparsec,
                        bytestring,
+                       either-result,
                        mtl,
                        utf8-string
   ghc-options:         -Wall
diff --git a/src/Database/PostgreSQL/Placeholder/Convert.hs b/src/Database/PostgreSQL/Placeholder/Convert.hs
--- a/src/Database/PostgreSQL/Placeholder/Convert.hs
+++ b/src/Database/PostgreSQL/Placeholder/Convert.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE CPP               #-}
+
 module Database.PostgreSQL.Placeholder.Convert
   ( convertQuestionMarkStyleToDollarSignStyle
   , QD.splitQueries
@@ -7,5 +9,10 @@
 
 import Data.ByteString (ByteString)
 
-convertQuestionMarkStyleToDollarSignStyle :: ByteString-> Either String ByteString
+#if !MIN_VERSION_base(4,13,0)
+import           Control.Monad.Fail               (MonadFail)
+#endif
+
+-- | Convert question mark style to dollar sign style of PostgreSQL SQL.
+convertQuestionMarkStyleToDollarSignStyle :: MonadFail m => ByteString -> m ByteString
 convertQuestionMarkStyleToDollarSignStyle = QD.convert
diff --git a/src/Database/PostgreSQL/Placeholder/Convert/QuestionToDollar.hs b/src/Database/PostgreSQL/Placeholder/Convert/QuestionToDollar.hs
--- a/src/Database/PostgreSQL/Placeholder/Convert/QuestionToDollar.hs
+++ b/src/Database/PostgreSQL/Placeholder/Convert/QuestionToDollar.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP               #-}
 {-# LANGUAGE OverloadedStrings #-}
 
 module Database.PostgreSQL.Placeholder.Convert.QuestionToDollar
@@ -15,27 +16,32 @@
 import           Data.ByteString                  (ByteString)
 import qualified Data.ByteString                  as BS
 import qualified Data.ByteString.UTF8             as BSU
+import qualified Data.Either.Result               as R
 
--- | Convert question mark style to dollar sign style of PostgreSQL SQL.
-convert :: ByteString-> Either String ByteString
+#if !MIN_VERSION_base(4,13,0)
+import           Control.Monad.Fail               (MonadFail)
+#endif
+
+convert :: MonadFail m => ByteString -> m ByteString
 convert q =
-  flip AP.parseOnly q $
-    flip evalStateT 1 $
-      (mconcat <$>) $ do
-        ss <-
-          AP.many' $
-            AP.choice
-              [ question
-              , lift questionLiteral
-              , lift singleQuoteLiteral
-              , lift doubleQuoteLiteral
-              , lift dollarQuoteLiteral
-              , lift lineComment
-              , lift blockComment
-              , lift $ BS.pack . (:[]) <$> AP.anyWord8
-              ]
-        lift AP.endOfInput
-        pure ss
+  R.toMonadFail $ R.fromEither $
+    flip AP.parseOnly q $
+      flip evalStateT 1 $
+        (mconcat <$>) $ do
+          ss <-
+            AP.many' $
+              AP.choice
+                [ question
+                , lift questionLiteral
+                , lift singleQuoteLiteral
+                , lift doubleQuoteLiteral
+                , lift dollarQuoteLiteral
+                , lift lineComment
+                , lift blockComment
+                , lift $ BS.pack . (:[]) <$> AP.anyWord8
+                ]
+          lift AP.endOfInput
+          pure ss
 
 singleQuoteLiteral :: AP.Parser BS.ByteString
 singleQuoteLiteral = oneCharQuoteLiteral '\'' <?> "singleQuoteLiteral"
diff --git a/test/Database/PostgreSQL/Placeholder/ConvertSpec.hs b/test/Database/PostgreSQL/Placeholder/ConvertSpec.hs
--- a/test/Database/PostgreSQL/Placeholder/ConvertSpec.hs
+++ b/test/Database/PostgreSQL/Placeholder/ConvertSpec.hs
@@ -10,16 +10,16 @@
 spec = do
   describe "convertQuestionMarkStyleToDollarSignStyle" $ do
     it "SELECT * FROM person" $ do
-      convertQuestionMarkStyleToDollarSignStyle "SELECT * FROM person" `shouldBe` Right "SELECT * FROM person"
+      convertQuestionMarkStyleToDollarSignStyle "SELECT * FROM person" `shouldReturn` "SELECT * FROM person"
 
     it "SELECT * FROM person WHERE id = ?" $ do
-      convertQuestionMarkStyleToDollarSignStyle "SELECT * FROM person WHERE id = ?" `shouldBe` Right "SELECT * FROM person WHERE id = $1"
+      convertQuestionMarkStyleToDollarSignStyle "SELECT * FROM person WHERE id = ?" `shouldReturn` "SELECT * FROM person WHERE id = $1"
 
     it "SELECT * FROM person WHERE name = '?'" $ do
-      convertQuestionMarkStyleToDollarSignStyle "SELECT * FROM person WHERE name = '?'" `shouldBe` Right "SELECT * FROM person WHERE name = '?'"
+      convertQuestionMarkStyleToDollarSignStyle "SELECT * FROM person WHERE name = '?'" `shouldReturn` "SELECT * FROM person WHERE name = '?'"
 
     it "SELECT * FROM person WHERE name = $$?$$" $ do
-      convertQuestionMarkStyleToDollarSignStyle "SELECT * FROM person WHERE name = $$?$$" `shouldBe` Right "SELECT * FROM person WHERE name = $$?$$"
+      convertQuestionMarkStyleToDollarSignStyle "SELECT * FROM person WHERE name = $$?$$" `shouldReturn` "SELECT * FROM person WHERE name = $$?$$"
 
     it "SELECT * FROM person WHERE name = $name$?$name$" $ do
-      convertQuestionMarkStyleToDollarSignStyle "SELECT * FROM person WHERE name = $name$?$name$" `shouldBe` Right "SELECT * FROM person WHERE name = $name$?$name$"
+      convertQuestionMarkStyleToDollarSignStyle "SELECT * FROM person WHERE name = $name$?$name$" `shouldReturn` "SELECT * FROM person WHERE name = $name$?$name$"
