use a compatibility class

This commit is contained in:
Matt Parsons 2017-09-13 16:27:18 -06:00
parent 91ea0b0fca
commit dbf53c31fb

View File

@ -53,6 +53,11 @@ import qualified Data.ByteString as B
import qualified Data.Text as T import qualified Data.Text as T
import qualified Data.Text.Lazy as TL import qualified Data.Text.Lazy as TL
class BackendCompatible sup sub
instance BackendCompatible SqlBackend SqlBackend
instance BackendCompatible SqlBackend SqlReadBackend
instance BackendCompatible SqlBackend SqlWriteBackend
-- | Finally tagless representation of @esqueleto@'s EDSL. -- | Finally tagless representation of @esqueleto@'s EDSL.
class (Functor query, Applicative query, Monad query) => class (Functor query, Applicative query, Monad query) =>
@ -72,12 +77,12 @@ class (Functor query, Applicative query, Monad query) =>
-- @JOIN@. -- @JOIN@.
fromStart fromStart
:: ( PersistEntity a :: ( PersistEntity a
, PersistEntityBackend a ~ backend ) , BackendCompatible backend (PersistEntityBackend a) )
=> query (expr (PreprocessedFrom (expr (Entity a)))) => query (expr (PreprocessedFrom (expr (Entity a))))
-- | (Internal) Same as 'fromStart', but entity may be missing. -- | (Internal) Same as 'fromStart', but entity may be missing.
fromStartMaybe fromStartMaybe
:: ( PersistEntity a :: ( PersistEntity a
, PersistEntityBackend a ~ backend ) , BackendCompatible backend (PersistEntityBackend a) )
=> query (expr (PreprocessedFrom (expr (Maybe (Entity a))))) => query (expr (PreprocessedFrom (expr (Maybe (Entity a)))))
-- | (Internal) Do a @JOIN@. -- | (Internal) Do a @JOIN@.
fromJoin fromJoin
@ -1041,13 +1046,13 @@ class Esqueleto query expr backend => FromPreprocess query expr backend a where
instance ( Esqueleto query expr backend instance ( Esqueleto query expr backend
, PersistEntity val , PersistEntity val
, PersistEntityBackend val ~ backend , BackendCompatible backend (PersistEntityBackend val)
) => FromPreprocess query expr backend (expr (Entity val)) where ) => FromPreprocess query expr backend (expr (Entity val)) where
fromPreprocess = fromStart fromPreprocess = fromStart
instance ( Esqueleto query expr backend instance ( Esqueleto query expr backend
, PersistEntity val , PersistEntity val
, PersistEntityBackend val ~ backend , BackendCompatible backend (PersistEntityBackend val)
) => FromPreprocess query expr backend (expr (Maybe (Entity val))) where ) => FromPreprocess query expr backend (expr (Maybe (Entity val))) where
fromPreprocess = fromStartMaybe fromPreprocess = fromStartMaybe