diff --git a/hsx2hs.cabal b/hsx2hs.cabal
--- a/hsx2hs.cabal
+++ b/hsx2hs.cabal
@@ -1,5 +1,5 @@
 Name:                   hsx2hs
-Version:                0.14.1.4
+Version:                0.14.1.5
 License:                BSD3
 License-File:           LICENSE
 Author:                 Niklas Broberg, Joel Bjornson
@@ -72,3 +72,5 @@
 Executable hsx2hs
   Main-Is:                hsx2hs.hs
   Hs-Source-Dirs:         src
+  Other-modules:          Language.Haskell.HSX.Transform
+                          Language.Haskell.HSX.QQ
diff --git a/src/Language/Haskell/HSX/Transform.hs b/src/Language/Haskell/HSX/Transform.hs
--- a/src/Language/Haskell/HSX/Transform.hs
+++ b/src/Language/Haskell/HSX/Transform.hs
@@ -24,6 +24,9 @@
 import Language.Haskell.Exts.Build
 import Control.Applicative (Applicative(pure, (<*>)))
 import Control.Monad       (ap)
+#if MIN_VERSION_base(4,9,0)
+import qualified Control.Monad.Fail as Fail
+#endif
 import Data.List (union)
 
 import Debug.Trace (trace)
@@ -43,6 +46,13 @@
  (MkHsxM f) >>= k = MkHsxM (\s -> let (a, s') = f s
                                       (MkHsxM f') = k a
                                    in f' s')
+
+#if MIN_VERSION_base(4,9,0)
+-- this is probably wrong, but should never be called anyway.
+instance Fail.MonadFail HsxM where
+    fail str = error str
+    {-# INLINE fail #-}
+#endif
 
 getHsxState :: HsxM HsxState
 getHsxState = MkHsxM (\s -> (s, s))
