diff --git a/hasql-migration.cabal b/hasql-migration.cabal
--- a/hasql-migration.cabal
+++ b/hasql-migration.cabal
@@ -1,5 +1,5 @@
 name:                       hasql-migration
-version:                    0.2.0
+version:                    0.3.0
 synopsis:                   PostgreSQL Schema Migrations
 homepage:                   https://github.com/tvh/hasql-migration
 Bug-reports:                https://github.com/tvh/hasql-migration/issues
@@ -12,7 +12,7 @@
 build-type:                 Simple
 cabal-version:              >= 1.10
 description:                A PostgreSQL-simple schema migration utility
-tested-with:                GHC==8.0.1, GHC==8.2.2, GHC==8.4.3
+tested-with:                GHC==8.0.1, GHC==8.2.2, GHC==8.4.3, GHC==8.6.5
 extra-source-files:         License
                             Readme.markdown
 
@@ -36,9 +36,8 @@
                             bytestring                  >= 0.10,
                             contravariant               >= 1.3,
                             cryptonite                  >= 0.11,
-                            data-default-class          >= 0.0.1,
                             directory                   >= 1.2,
-                            hasql                       >= 1.3,
+                            hasql                       >= 1.4,
                             hasql-transaction           >= 0.7,
                             memory,
                             text                        >= 1.2,
diff --git a/src/Hasql/Migration.hs b/src/Hasql/Migration.hs
--- a/src/Hasql/Migration.hs
+++ b/src/Hasql/Migration.hs
@@ -34,10 +34,8 @@
     , SchemaMigration(..)
     ) where
 
-import Control.Arrow
 import Crypto.Hash (hashWith, MD5(..))
 import Data.ByteArray.Encoding
-import Data.Default.Class
 import Data.Functor.Contravariant
 import Data.List (isPrefixOf, sort)
 import Data.Time (LocalTime)
@@ -46,6 +44,7 @@
 import Hasql.Statement
 import Hasql.Transaction
 import System.Directory (getDirectoryContents)
+import Data.Semigroup ((<>))
 import qualified Data.ByteString as BS (ByteString, readFile)
 import qualified Data.Text as T
 import qualified Data.Text.Encoding as T
@@ -95,12 +94,13 @@
             return Nothing
         ScriptNotExecuted -> do
             sql contents
-            statement (name, checksum) (Statement q (contramap (first T.pack) def) Decoders.unit False)
+            statement (name, checksum) (Statement q enc Decoders.noResult False)
             return Nothing
         ScriptModified _ -> do
             return (Just $ ScriptChanged name)
     where
         q = "insert into schema_migrations(filename, checksum) values($1, $2)"
+        enc = ((T.pack . fst) >$< Encoders.param (Encoders.nonNullable Encoders.text)) <> (snd >$< Encoders.param (Encoders.nonNullable Encoders.text))
 
 -- | Initializes the database schema with a helper table containing
 -- meta-information about executed migrations.
@@ -147,7 +147,8 @@
 -- will be executed and its meta-information will be recorded.
 checkScript :: ScriptName -> Checksum -> Transaction CheckScriptResult
 checkScript name checksum =
-    statement name (Statement q (contramap T.pack (Encoders.param def)) (Decoders.rowMaybe (Decoders.column def)) False) >>= \case
+    statement name (Statement q (contramap T.pack (Encoders.param (Encoders.nonNullable Encoders.text))) 
+        (Decoders.rowMaybe (Decoders.column (Decoders.nonNullable Decoders.text))) False) >>= \case
         Nothing ->
             return ScriptNotExecuted
         Just actualChecksum | checksum == actualChecksum ->
@@ -201,7 +202,7 @@
 -- | Produces a list of all executed 'SchemaMigration's.
 getMigrations :: Transaction [SchemaMigration]
 getMigrations =
-    statement () $ Statement q def (Decoders.rowList decodeSchemaMigration) False
+    statement () $ Statement q Encoders.noParams (Decoders.rowList decodeSchemaMigration) False
     where
         q = mconcat
             [ "select filename, checksum, executed_at "
@@ -225,6 +226,6 @@
 decodeSchemaMigration :: Decoders.Row SchemaMigration
 decodeSchemaMigration =
     SchemaMigration
-    <$> Decoders.column def
-    <*> Decoders.column def
-    <*> Decoders.column def
+    <$> Decoders.column (Decoders.nonNullable Decoders.bytea)
+    <*> Decoders.column (Decoders.nonNullable Decoders.text)
+    <*> Decoders.column (Decoders.nonNullable Decoders.timestamp)
diff --git a/src/Hasql/Migration/Util.hs b/src/Hasql/Migration/Util.hs
--- a/src/Hasql/Migration/Util.hs
+++ b/src/Hasql/Migration/Util.hs
@@ -21,12 +21,11 @@
 import qualified Hasql.Decoders as Decoders
 import           Hasql.Transaction (statement, Transaction)
 import Data.Text (Text)
-import Data.Default.Class
 
 -- | Checks if the table with the given name exists in the database.
 existsTable :: Text -> Transaction Bool
 existsTable table =
     fmap (not . null) $ statement table q
     where
-        q = Statement sql (Encoders.param def) (Decoders.rowList (Decoders.column Decoders.int8)) False
+        q = Statement sql (Encoders.param (Encoders.nonNullable Encoders.text)) (Decoders.rowList (Decoders.column (Decoders.nullable Decoders.int8))) False
         sql = "select relname from pg_class where relname = $1"
diff --git a/test/Hasql/MigrationTest.hs b/test/Hasql/MigrationTest.hs
--- a/test/Hasql/MigrationTest.hs
+++ b/test/Hasql/MigrationTest.hs
@@ -31,7 +31,8 @@
 migrationSpec con = describe "Migrations" $ do
     let migrationScript = MigrationScript "test.sql" q
     let migrationScriptAltered = MigrationScript "test.sql" ""
-    [migrationDir] <- runIO $ loadMigrationsFromDirectory "share/test/scripts"
+    mds <- runIO $ loadMigrationsFromDirectory "share/test/scripts"
+    let migrationDir = head mds 
     migrationFile <- runIO $ loadMigrationFromFile "s.sql" "share/test/script.sql"
 
     it "initializes a database" $ do
