{-# OPTIONS_GHC -fno-warn-orphans #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE UndecidableInstances #-} {-# LANGUAGE TemplateHaskell #-} -- | -- Module : Database.HDBC.Record.Persistable -- Copyright : 2013 Kei Hibino -- License : BSD3 -- -- Maintainer : ex8k.hibino@gmail.com -- Stability : experimental -- Portability : unknown -- -- This module provides HDBC instance definitions of DB-record. module Database.HDBC.Record.Persistable ( persistableSqlValue ) where import Database.Record (PersistableSqlValue, PersistableType (..), PersistableValue (..)) import Database.Record.Persistable (unsafePersistableSqlTypeFromNull) import qualified Database.Record.Persistable as Record import Database.HDBC.Record.InternalTH (derivePersistableInstancesFromConvertibleSqlValues) import Data.Convertible (Convertible) import Database.HDBC (SqlValue(SqlNull), fromSql, toSql) instance PersistableType SqlValue where persistableType = unsafePersistableSqlTypeFromNull SqlNull -- | Derived 'PersistableSqlValue' from 'Convertible'. persistableSqlValue :: (Convertible SqlValue a, Convertible a SqlValue) => PersistableSqlValue SqlValue a persistableSqlValue = Record.persistableSqlValue persistableType fromSql toSql -- | Infered 'PersistableSqlValue' from 'Convertible'. instance (Convertible SqlValue a, Convertible a SqlValue) => PersistableValue SqlValue a where persistableValue = persistableSqlValue $(derivePersistableInstancesFromConvertibleSqlValues)