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
class Decodable a where
decode :: Hasql.Row a
default decode :: (HasEot a, GDecodable (Eot a)) => Hasql.Row a
decode = fromEot <$> gdecode
instance Decodable Char where
decode = Hasql.value def
instance Decodable Bool where
decode = Hasql.value def
instance Decodable Int16 where
decode = Hasql.value def
instance Decodable Int32 where
decode = Hasql.value def
instance Decodable Int64 where
decode = Hasql.value def
instance Decodable Double where
decode = Hasql.value def
instance Decodable Float where
decode = Hasql.value def
instance Decodable Text where
decode = Hasql.value def
instance Decodable ByteString where
decode = Hasql.value def
instance Decodable DiffTime where
decode = Hasql.value def
instance Decodable UTCTime where
decode = Hasql.value def
instance Decodable Day where
decode = Hasql.value def
instance Decodable TimeOfDay where
decode = Hasql.value def
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