diff --git a/quickcheck-transformer.cabal b/quickcheck-transformer.cabal
--- a/quickcheck-transformer.cabal
+++ b/quickcheck-transformer.cabal
@@ -1,5 +1,5 @@
 Name:          quickcheck-transformer
-Version:       0.3
+Version:       0.3.1
 Synopsis:      A GenT monad transformer for QuickCheck library.
 Description:
   A fork of QuickCheck-GenT that works for older GHC versions
@@ -18,7 +18,7 @@
 
 
 Source-Repository this
-  Tag:         0.3
+  Tag:         0.3.1
   Type:        darcs
   Location:    http://hub.darcs.net/thielema/quickcheck-transformer/
 
@@ -29,11 +29,18 @@
 
 Library
   Hs-Source-Dirs: src
+  If impl(ghc>=8.8)
+    Hs-Source-Dirs: src-fail/from-4.13/
+  Else
+    Hs-Source-Dirs: src-fail/before-4.13/
   Exposed-Modules:
     Test.QuickCheck.GenT
+  Other-Modules:
+    Test.QuickCheck.GenT.Private
   Build-Depends:
     QuickCheck >=2.7 && <3,
     random >=1.0 && <1.2,
     transformers >=0.5 && <0.6,
     base >=4.3 && <5
   Default-Language: Haskell2010
+  GHC-Options: -Wall
diff --git a/src-fail/before-4.13/Test/QuickCheck/GenT/Private.hs b/src-fail/before-4.13/Test/QuickCheck/GenT/Private.hs
new file mode 100644
--- /dev/null
+++ b/src-fail/before-4.13/Test/QuickCheck/GenT/Private.hs
@@ -0,0 +1,33 @@
+module Test.QuickCheck.GenT.Private where
+
+import qualified Test.QuickCheck.Random as QC
+import qualified System.Random as Random
+
+import Control.Monad.Trans.Class (MonadTrans, lift)
+import Control.Monad.IO.Class (MonadIO, liftIO)
+import Control.Monad (ap)
+import Control.Applicative (Applicative, pure, (<*>))
+
+
+newtype GenT m a = GenT { unGenT :: QC.QCGen -> Int -> m a }
+
+instance (Functor m) => Functor (GenT m) where
+  fmap f m = GenT $ \r n -> fmap f $ unGenT m r n
+
+instance (Monad m) => Monad (GenT m) where
+  return a = GenT (\_ _ -> return a)
+  m >>= k = GenT $ \r n -> do
+    let (r1, r2) = Random.split r
+    a <- unGenT m r1 n
+    unGenT (k a) r2 n
+  fail msg = GenT (\_ _ -> fail msg)
+
+instance (Functor m, Monad m) => Applicative (GenT m) where
+  pure = return
+  (<*>) = ap
+
+instance MonadTrans GenT where
+  lift m = GenT (\_ _ -> m)
+
+instance (MonadIO m) => MonadIO (GenT m) where
+  liftIO = lift . liftIO
diff --git a/src-fail/from-4.13/Test/QuickCheck/GenT/Private.hs b/src-fail/from-4.13/Test/QuickCheck/GenT/Private.hs
new file mode 100644
--- /dev/null
+++ b/src-fail/from-4.13/Test/QuickCheck/GenT/Private.hs
@@ -0,0 +1,34 @@
+module Test.QuickCheck.GenT.Private where
+
+import qualified Test.QuickCheck.Random as QC
+import qualified System.Random as Random
+
+import Control.Monad.Trans.Class (MonadTrans, lift)
+import Control.Monad.IO.Class (MonadIO, liftIO)
+import Control.Monad (ap)
+
+
+newtype GenT m a = GenT { unGenT :: QC.QCGen -> Int -> m a }
+
+instance (Functor m) => Functor (GenT m) where
+  fmap f m = GenT $ \r n -> fmap f $ unGenT m r n
+
+instance (Monad m) => Monad (GenT m) where
+  return a = GenT (\_ _ -> return a)
+  m >>= k = GenT $ \r n -> do
+    let (r1, r2) = Random.split r
+    a <- unGenT m r1 n
+    unGenT (k a) r2 n
+
+instance (MonadFail m) => MonadFail (GenT m) where
+  fail msg = GenT (\_ _ -> fail msg)
+
+instance (Functor m, Monad m) => Applicative (GenT m) where
+  pure = return
+  (<*>) = ap
+
+instance MonadTrans GenT where
+  lift m = GenT (\_ _ -> m)
+
+instance (MonadIO m) => MonadIO (GenT m) where
+  liftIO = lift . liftIO
diff --git a/src/Test/QuickCheck/GenT.hs b/src/Test/QuickCheck/GenT.hs
--- a/src/Test/QuickCheck/GenT.hs
+++ b/src/Test/QuickCheck/GenT.hs
@@ -2,43 +2,36 @@
 -- Most of the code is borrowed from
 -- <http://haskell.1045720.n5.nabble.com/darcs-patch-GenT-monad-transformer-variant-of-Gen-QuickCheck-2-td3172136.html a mailing list discussion>.
 -- Therefor, credits go to Paul Johnson and Felix Martini.
-module Test.QuickCheck.GenT where
+module Test.QuickCheck.GenT (
+   GenT (GenT, unGenT),
+   runGenT,
+   MonadGen (liftGen, variant, sized, resize, choose),
+   var,
+   suchThat,
+   suchThatMaybe,
+   listOf,
+   listOf1,
+   vectorOf,
+   oneof,
+   frequency,
+   elements,
+   growingElements,
+   oneofMay,
+   elementsMay,
+   growingElementsMay,
+   ) where
 
 import qualified Test.QuickCheck.Gen as QC
 import qualified Test.QuickCheck.Random as QC
 import qualified System.Random as Random
 
-import Control.Monad.Trans.Class (MonadTrans, lift)
-import Control.Monad.IO.Class (MonadIO, liftIO)
-import Control.Monad (ap)
-import Control.Applicative (Applicative, pure, (<*>), (<$>))
+import Test.QuickCheck.GenT.Private (GenT(..))
 
+import Control.Applicative (Applicative, (<$>))
+
 import Data.Maybe (fromMaybe)
 
 
-newtype GenT m a = GenT { unGenT :: QC.QCGen -> Int -> m a }
-
-instance (Functor m) => Functor (GenT m) where
-  fmap f m = GenT $ \r n -> fmap f $ unGenT m r n
-
-instance (Monad m) => Monad (GenT m) where
-  return a = GenT (\_ _ -> return a)
-  m >>= k = GenT $ \r n -> do
-    let (r1, r2) = Random.split r
-    a <- unGenT m r1 n
-    unGenT (k a) r2 n
-  fail msg = GenT (\_ _ -> fail msg)
-
-instance (Functor m, Monad m) => Applicative (GenT m) where
-  pure = return
-  (<*>) = ap
-
-instance MonadTrans GenT where
-  lift m = GenT (\_ _ -> m)
-
-instance (MonadIO m) => MonadIO (GenT m) where
-  liftIO = lift . liftIO
-
 runGenT :: GenT m a -> QC.Gen (m a)
 runGenT (GenT run) = QC.MkGen run
 
@@ -180,5 +173,5 @@
     where
       k = length xs
       mx = 100
-      log' = round . log . fromIntegral
+      log' = round . log . (id :: Double -> Double) . fromIntegral
       size n = (log' n + 1) * k `div` log' mx
