{-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE TemplateHaskell #-} module Database.Id.Groundhog.TH where import Data.Int import Database.Id.Groundhog import Database.Groundhog.Core import Language.Haskell.TH makeDefaultKeyIdInt64 :: Name -> Name -> Q [Dec] makeDefaultKeyIdInt64 n k = do pv <- newName "pv" [d| instance IdDataIs $(conT n) Int64 => DefaultKeyId $(conT n) where toIdData _ dk = case $(lamE [conP k [varP pv]] (varE pv)) dk of PersistInt64 x -> x _ -> error "makeDefaultKeyIdInt64: pattern match failure (this should be impossible)" fromIdData _ = $(conE k) . PersistInt64 |] makeDefaultKeyIdSimple :: Name -> Name -> Q [Dec] makeDefaultKeyIdSimple n k = do pv <- newName "pv" [d| instance DefaultKeyId $(conT n) where toIdData _ = $(lamE [conP k [varP pv]] (varE pv)) fromIdData _ = $(conE k) |]