{-| 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 ( hasDuplicateConstrs ) where import Data.Data (Data, showConstr, toConstr) import Data.Function (on) import Data.List (nubBy) -- | Show the name of the constructor. showData :: Data a => a -> String showData = showConstr . toConstr -- | Return True if the given list has duplicate constructors. hasDuplicateConstrs :: Data a => [a] -> Bool hasDuplicateConstrs l = length l /= length (nubBy ((==) `on` showData) l)