diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,8 @@
+## persistent-migration 0.2.1
+
+Fixes:
+* Fix build for persistent-2.12.0.0
+
 ## persistent-migration 0.2.0
 
 Breaking changes:
diff --git a/persistent-migration.cabal b/persistent-migration.cabal
--- a/persistent-migration.cabal
+++ b/persistent-migration.cabal
@@ -4,10 +4,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: ba05ddb62204797a742d3b09fe26c8f9469e7c342a690d1e19a803873653c5f9
+-- hash: 719969a82682f1123ab4f973c7366736f3b3fa2ccc013f2c901a334894fc6408
 
 name:           persistent-migration
-version:        0.2.0
+version:        0.2.1
 synopsis:       Manual migrations for the persistent library
 description:    Manual migrations for the persistent library.
 category:       Database
@@ -34,7 +34,6 @@
       Database.Persist.Migration.Operation
       Database.Persist.Migration.Operation.Types
       Database.Persist.Migration.Postgres
-      Database.Persist.Migration.Utils.Data
       Database.Persist.Migration.Utils.Plan
       Database.Persist.Migration.Utils.Sql
   other-modules:
diff --git a/src/Database/Persist/Migration/Operation.hs b/src/Database/Persist/Migration/Operation.hs
--- a/src/Database/Persist/Migration/Operation.hs
+++ b/src/Database/Persist/Migration/Operation.hs
@@ -20,7 +20,6 @@
 import Data.Maybe (isNothing, mapMaybe)
 import Data.Text (Text)
 import Database.Persist.Migration.Operation.Types
-import Database.Persist.Migration.Utils.Data (isConstr)
 import Database.Persist.Migration.Utils.Sql (MigrateSql)
 import Database.Persist.Sql (PersistValue, SqlPersistT)
 
@@ -87,7 +86,7 @@
 
   mapM_ validateColumn schema
 
-  case length . filter (isConstr "PrimaryKey") $ constraints of
+  case length . filter isPrimaryKey $ constraints of
     0 -> fail' "No primary key specified"
     1 -> return ()
     _ -> fail' "Multiple primary keys specified"
diff --git a/src/Database/Persist/Migration/Operation/Types.hs b/src/Database/Persist/Migration/Operation/Types.hs
--- a/src/Database/Persist/Migration/Operation/Types.hs
+++ b/src/Database/Persist/Migration/Operation/Types.hs
@@ -6,13 +6,10 @@
 
 Defines auxiliary data types that can be used in Operations.
 -}
-{-# LANGUAGE DeriveDataTypeable #-}
 {-# LANGUAGE DuplicateRecordFields #-}
 {-# LANGUAGE LambdaCase #-}
 {-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE RecordWildCards #-}
-{-# LANGUAGE StandaloneDeriving #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
 
 module Database.Persist.Migration.Operation.Types
   ( ColumnIdentifier
@@ -21,14 +18,14 @@
   , validateColumn
   , ColumnProp(..)
   , TableConstraint(..)
+  , isPrimaryKey
   , getConstraintColumns
   ) where
 
 import Control.Monad (when)
-import Data.Data (Data)
+import Data.List (nub)
 import Data.Text (Text)
 import qualified Data.Text as Text
-import Database.Persist.Migration.Utils.Data (hasDuplicateConstrs)
 import Database.Persist.Sql (PersistValue(..))
 import Database.Persist.Types (SqlType)
 
@@ -48,9 +45,18 @@
 
 -- | Validate a Column.
 validateColumn :: Column -> Either String ()
-validateColumn col@Column{..} = when (hasDuplicateConstrs colProps) $
+validateColumn col@Column{..} = when (hasDuplicates $ map getColumnPropName colProps) $
   Left $ "Duplicate column properties detected: " ++ show col
+  where
+    hasDuplicates l = length l /= length (nub l)
 
+    getColumnPropName :: ColumnProp -> String
+    getColumnPropName = \case
+      NotNull{} -> "NotNull"
+      References{} -> "References"
+      AutoIncrement{} -> "AutoIncrement"
+      Default{} -> "Default"
+
 -- | A property for a 'Column'.
 data ColumnProp
   = NotNull
@@ -66,15 +72,18 @@
     -- See 'AddColumn' for setting the default value for existing rows in a migration.
     --
     -- More info: https://www.yesodweb.com/book/persistent#persistent_attributes
-  deriving (Show,Eq,Data)
-
-deriving instance Data PersistValue
+  deriving (Show,Eq)
 
 -- | Table constraints in a CREATE query.
 data TableConstraint
   = PrimaryKey [Text] -- ^ PRIMARY KEY (col1, col2, ...)
   | Unique Text [Text] -- ^ CONSTRAINT name UNIQUE (col1, col2, ...)
-  deriving (Show,Data)
+  deriving (Show)
+
+isPrimaryKey :: TableConstraint -> Bool
+isPrimaryKey = \case
+  PrimaryKey{} -> True
+  _ -> False
 
 -- | Get the columns defined in the given TableConstraint.
 getConstraintColumns :: TableConstraint -> [Text]
diff --git a/src/Database/Persist/Migration/Utils/Data.hs b/src/Database/Persist/Migration/Utils/Data.hs
deleted file mode 100644
--- a/src/Database/Persist/Migration/Utils/Data.hs
+++ /dev/null
@@ -1,31 +0,0 @@
-{-|
-Module      :  Database.Persist.Migration.Utils.Data
-Maintainer  :  Brandon Chinn <brandonchinn178@gmail.com>
-Stability   :  experimental
-Portability :  portable
-
-Define functions useful for data constructors.
--}
-
-module Database.Persist.Migration.Utils.Data
-  ( showConstr
-  , isConstr
-  , hasDuplicateConstrs
-  ) where
-
-import Data.Data (Data)
-import qualified Data.Data as Data
-import Data.Function (on)
-import Data.List (nubBy)
-
--- | Show the name of the constructor.
-showConstr :: Data a => a -> String
-showConstr = Data.showConstr . Data.toConstr
-
--- | Return True if the given constructor has the given name.
-isConstr :: Data a => String -> a -> Bool
-isConstr name = (== name) . showConstr
-
--- | Return True if the given list has duplicate constructors.
-hasDuplicateConstrs :: Data a => [a] -> Bool
-hasDuplicateConstrs l = length l /= length (nubBy ((==) `on` showConstr) l)
