-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Derive a postgres client to database API specified by servant-db -- -- Derive a postgres client to database API specified by servant-db @package servant-db-postgresql @version 0.2.0.1 module Servant.DB.PostgreSQL.Default -- | Wrapper around Maybe to distinguish default arguments from -- nullable ones newtype Default a Default :: Maybe a -> Default a [unDefault] :: Default a -> Maybe a instance GHC.Generics.Generic (Servant.DB.PostgreSQL.Default.Default a) instance GHC.Read.Read a => GHC.Read.Read (Servant.DB.PostgreSQL.Default.Default a) instance GHC.Show.Show a => GHC.Show.Show (Servant.DB.PostgreSQL.Default.Default a) instance GHC.Classes.Ord a => GHC.Classes.Ord (Servant.DB.PostgreSQL.Default.Default a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Servant.DB.PostgreSQL.Default.Default a) module Servant.DB.PostgreSQL.Variadic newtype Variadic a Variadic :: PGArray a -> Variadic a [unVariadic] :: Variadic a -> PGArray a newtype PGArray a :: * -> * PGArray :: [a] -> PGArray a [fromPGArray] :: PGArray a -> [a] instance GHC.Show.Show a => GHC.Show.Show (Servant.DB.PostgreSQL.Variadic.Variadic a) instance GHC.Read.Read a => GHC.Read.Read (Servant.DB.PostgreSQL.Variadic.Variadic a) instance GHC.Classes.Ord a => GHC.Classes.Ord (Servant.DB.PostgreSQL.Variadic.Variadic a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Servant.DB.PostgreSQL.Variadic.Variadic a) instance GHC.Base.Functor Servant.DB.PostgreSQL.Variadic.Variadic module Servant.DB.PostgreSQL.Context -- | Captures special cases of stored function arguments data Argument a -- | Variadic argument has uncommon call syntax ArgVariadic :: (Variadic a) -> Argument a -- | Default keyword ArgDefault :: (Maybe a) -> Argument a -- | Common case ArgSimple :: a -> Argument a -- | Encapsulated argument that can be serialized into field or type -- checked -- -- The type parameter can be ToField for query generation or -- Typeable for type checking of DB signature. data QueryArg (r :: * -> Constraint) QueryArg :: (Argument a) -> QueryArg -- | Catches intermediate parameters for query data QueryContext (r :: * -> Constraint) QueryContext :: !(Seq (Maybe Text, QueryArg r)) -> !(Maybe Text) -> !Bool -> QueryContext -- | List of named and positional arguments [queryArguments] :: QueryContext -> !(Seq (Maybe Text, QueryArg r)) -- | Schema name [querySchema] :: QueryContext -> !(Maybe Text) -- | Whether the query returns void [queryVoid] :: QueryContext -> !Bool -- | New empty query context newQueryContext :: QueryContext r -- | Add new argument to query context addQueryArgument :: r a => Maybe Text -> Argument a -> QueryContext r -> QueryContext r -- | Construct query that calls DB stored function queryStoredFunction :: forall r. r ~ ToField => Text -> QueryContext r -> SqlBuilder instance GHC.Show.Show a => GHC.Show.Show (Servant.DB.PostgreSQL.Context.Argument a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Servant.DB.PostgreSQL.Context.Argument a) instance GHC.Generics.Generic (Servant.DB.PostgreSQL.Context.Argument a) module Servant.DB.PostgreSQL.HasDB -- | Derive DB client from API deriveDB :: HasDB layout m => Proxy layout -> Proxy m -> DB layout m -- | Derive DB client from API class HasDB layout (m :: * -> *) where type DB layout m :: * where { type family DB layout m :: *; } -- | Derive DB client from API layout deriveDBWithCtx :: HasDB layout m => Proxy layout -> Proxy m -> QueryContext ToField -> DB layout m instance (Servant.DB.PostgreSQL.HasDB.HasDB api1 m, Servant.DB.PostgreSQL.HasDB.HasDB api2 m) => Servant.DB.PostgreSQL.HasDB.HasDB (api1 Servant.API.Alternative.:<|> api2) m instance (GHC.TypeLits.KnownSymbol n, Servant.DB.PostgreSQL.HasDB.HasDB api m) => Servant.DB.PostgreSQL.HasDB.HasDB (n Servant.API.Sub.:> api) m instance (GHC.TypeLits.KnownSymbol n, Database.PostgreSQL.Simple.ToField.ToField a, Servant.DB.PostgreSQL.HasDB.HasDB api m) => Servant.DB.PostgreSQL.HasDB.HasDB (Servant.API.DB.Argument.ArgNamed n a Servant.API.Sub.:> api) m instance (GHC.TypeLits.KnownSymbol n, Database.PostgreSQL.Simple.ToField.ToField a, Servant.DB.PostgreSQL.HasDB.HasDB api m) => Servant.DB.PostgreSQL.HasDB.HasDB (Servant.API.DB.Argument.ArgNamed n (Servant.DB.PostgreSQL.Variadic.Variadic a) Servant.API.Sub.:> api) m instance (GHC.TypeLits.KnownSymbol n, Database.PostgreSQL.Simple.ToField.ToField a, Servant.DB.PostgreSQL.HasDB.HasDB api m) => Servant.DB.PostgreSQL.HasDB.HasDB (Servant.API.DB.Argument.ArgNamed n (Servant.DB.PostgreSQL.Default.Default a) Servant.API.Sub.:> api) m instance (Database.PostgreSQL.Simple.ToField.ToField a, Servant.DB.PostgreSQL.HasDB.HasDB api m) => Servant.DB.PostgreSQL.HasDB.HasDB (Servant.API.DB.Argument.ArgPos a Servant.API.Sub.:> api) m instance (Database.PostgreSQL.Simple.ToField.ToField a, Servant.DB.PostgreSQL.HasDB.HasDB api m) => Servant.DB.PostgreSQL.HasDB.HasDB (Servant.API.DB.Argument.ArgPos (Servant.DB.PostgreSQL.Variadic.Variadic a) Servant.API.Sub.:> api) m instance (Database.PostgreSQL.Simple.ToField.ToField a, Servant.DB.PostgreSQL.HasDB.HasDB api m) => Servant.DB.PostgreSQL.HasDB.HasDB (Servant.API.DB.Argument.ArgPos (Servant.DB.PostgreSQL.Default.Default a) Servant.API.Sub.:> api) m instance (GHC.TypeLits.KnownSymbol n, Database.PostgreSQL.Query.Types.MonadPostgres m) => Servant.DB.PostgreSQL.HasDB.HasDB (Servant.API.DB.Procedure.Procedure n ()) m instance (GHC.TypeLits.KnownSymbol n, Database.PostgreSQL.Simple.FromRow.FromRow a, Database.PostgreSQL.Query.Types.MonadPostgres m) => Servant.DB.PostgreSQL.HasDB.HasDB (Servant.API.DB.Procedure.Procedure n [a]) m instance Database.PostgreSQL.Simple.FromRow.FromRow a => Database.PostgreSQL.Simple.FromRow.FromRow (GHC.Base.Maybe a) instance (GHC.TypeLits.KnownSymbol n, Database.PostgreSQL.Simple.FromRow.FromRow a, Database.PostgreSQL.Query.Types.MonadPostgres m) => Servant.DB.PostgreSQL.HasDB.HasDB (Servant.API.DB.Procedure.Procedure n (GHC.Base.Maybe a)) m instance (GHC.TypeLits.KnownSymbol n, Database.PostgreSQL.Simple.FromRow.FromRow a, Database.PostgreSQL.Query.Types.MonadPostgres m) => Servant.DB.PostgreSQL.HasDB.HasDB (Servant.API.DB.Procedure.Procedure n a) m module Servant.DB.PostgreSQL.Composite -- | Wrapper around a that indicates that the type can be used as -- composite type. -- --
-- >>> type UserAPI = Arg "u" (Composite User) :> Procedure "insertUser" () --newtype Composite a Composite :: a -> Composite a [unComposite] :: Composite a -> a instance GHC.Classes.Ord a => GHC.Classes.Ord (Servant.DB.PostgreSQL.Composite.Composite a) instance GHC.Read.Read a => GHC.Read.Read (Servant.DB.PostgreSQL.Composite.Composite a) instance GHC.Show.Show a => GHC.Show.Show (Servant.DB.PostgreSQL.Composite.Composite a) instance GHC.Generics.Generic (Servant.DB.PostgreSQL.Composite.Composite a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Servant.DB.PostgreSQL.Composite.Composite a) instance Database.PostgreSQL.Simple.ToRow.ToRow a => Database.PostgreSQL.Simple.ToField.ToField (Servant.DB.PostgreSQL.Composite.Composite a) -- |
-- newtype PostgresM a = PostgresM { runPostgresM :: PgMonadT (LoggingT IO) a }
-- deriving (Functor, HasPostgres, MonadLogger, Monad, Applicative, MonadBase IO)
--
--
--
-- type UserId = Int
--
-- data RegisterUser = RegisterUser {
-- userRegName :: String
-- , userRegPassword :: String
-- , userRegRegTime :: Day
-- } deriving (Eq)
--
-- deriveToRow ''RegisterUser
--
-- data User = User {
-- userId :: UserId
-- , userName :: String
-- , userPassword :: String
-- , userRegTime :: Day
-- } deriving (Eq)
--
-- deriveFromRow ''User
-- deriveToRow ''User
--
-- type UserAPI =
-- ArgNamed "u" (Composite RegisterUser)
-- :> Procedure "postUser" (Only Int)
-- :<|> ArgPos Int
-- :> Procedure "getUser" (Maybe User)
-- :<|> ArgPos Int
-- :> Procedure "deleteUser" ()
-- :<|> Procedure "getUsers" [User]
--
--
-- -- postUser :: Composite RegisterUser -> PostgresM (Only Int) -- getUser :: Int -> PostgresM (Maybe User) -- deleteUser :: Int -> PostgresM () -- getUsers :: PostgresM [User] -- ( postUser -- :<|> getUser -- :<|> deleteUser -- :<|> getUsers) = deriveDB (Proxy :: Proxy UserAPI) (Proxy :: Proxy PostgresM) ---- --
-- type API = "test" :> ArgPos Int :> Procedure "square" (Only Int) ---- -- That will call function `test.square(int)`. -- --
-- type API = ArgNamed "u" (Composite UserCreate) :> Procedure "postUser" (Only Int) ---- --
-- type API = ArgPos (PGArray Int) :> Procedure "mleast" (Maybe (Only Int)) ---- --
-- type API = ArgPos (Variadic Int) :> Procedure "mleast" (Maybe (Only Int)) ---- --
-- type API = ArgPos (Default Int) :> Procedure "foo" (Only Int) --module Servant.DB.PostgreSQL