hasql-class-0.0.0.0: src/Hasql/Class/Internal/Decodable.hs
module Hasql.Class.Internal.Decodable where
import Data.Default.Class (def)
import qualified Hasql.Decoders as Hasql
import Data.Time
import Data.Text (Text)
import Data.ByteString (ByteString)
import Data.Int
import Generics.Eot
-- | Datatypes that can be encoded as `hasql` PostgreSQL parameters. This
-- class can be generically derived.
--
-- #SINCE#
class Decodable a where
decode :: Hasql.Row a
default decode :: (HasEot a, GDecodable (Eot a)) => Hasql.Row a
decode = fromEot <$> gdecode
-- | #SINCE#
instance Decodable Char where
decode = Hasql.value def
-- | #SINCE#
instance Decodable Bool where
decode = Hasql.value def
-- | #SINCE#
instance Decodable Int16 where
decode = Hasql.value def
-- | #SINCE#
instance Decodable Int32 where
decode = Hasql.value def
-- | #SINCE#
instance Decodable Int64 where
decode = Hasql.value def
-- | #SINCE#
instance Decodable Double where
decode = Hasql.value def
-- | #SINCE#
instance Decodable Float where
decode = Hasql.value def
-- | #SINCE#
instance Decodable Text where
decode = Hasql.value def
-- | #SINCE#
instance Decodable ByteString where
decode = Hasql.value def
-- | #SINCE#
instance Decodable DiffTime where
decode = Hasql.value def
-- | #SINCE#
instance Decodable UTCTime where
decode = Hasql.value def
-- | #SINCE#
instance Decodable Day where
decode = Hasql.value def
-- | #SINCE#
instance Decodable TimeOfDay where
decode = Hasql.value def
-- | #SINCE#
instance Decodable LocalTime where
decode = Hasql.value def
class GDecodable eot where
gdecode :: Hasql.Row eot
instance (Decodable x, GDecodable xs)
=> GDecodable (x, xs) where
gdecode = (,) <$> decode <*> gdecode
instance GDecodable () where
gdecode = return ()
instance GDecodable x => GDecodable (Either x Void) where
gdecode = Left <$> gdecode