polysemy-db-0.0.1.0: Polysemy effects for databases
Safe HaskellSafe-Inferred
LanguageHaskell2010

Polysemy.Db

Synopsis

Documentation

The Polysemy effects Store and Query provide a high-level abstraction of database operations for CRUD and arbitrary queries.

Effects

data QStore f q d :: Effect Source #

type Store i d = QStore Maybe i (Uid i d) Source #

insert :: forall f i d r. Member (QStore f i d) r => d -> Sem r () Source #

upsert :: forall f i d r. Member (QStore f i d) r => d -> Sem r () Source #

delete :: forall f i d r. Member (QStore f i d) r => i -> Sem r (f d) Source #

deleteAll :: forall f i d r. Member (QStore f i d) r => Sem r [d] Source #

fetch :: forall f i d r. Member (QStore f i d) r => i -> Sem r (f d) Source #

fetchAll :: forall f i d r. Member (QStore f i d) r => Sem r [d] Source #

elem :: forall i d r. Member (Store i d) r => i -> Sem r Bool Source #

fetchPayload :: forall i d r. Member (Store i d) r => i -> Sem r (Maybe d) Source #

alter :: forall i d r. Member (Store i d) r => i -> (d -> d) -> Sem r () Source #

data Query q o :: Effect Source #

query :: forall q o r. Member (Query q o) r => q -> Sem r o Source #

data Random a :: Effect Source #

random :: forall a r. Member (Random a) r => Sem r a Source #

randomR :: forall a r. Member (Random a) r => (a, a) -> Sem r a Source #

data Id i :: Effect Source #

newId :: forall i r. Member (Id i) r => Sem r i Source #

Interpreters

interpretStoreConc :: forall i a r. Ord i => Show i => Member (Embed IO) r => PureStore i a -> InterpretersFor [Store i a !! DbError, AtomicState (PureStore i a)] r Source #

interpretStoreLocal :: forall i a r. Ord i => Show i => PureStore i a -> InterpretersFor [Store i a !! DbError, State (PureStore i a)] r Source #

interpretStoreState :: forall i a r. Ord i => Show i => Member (State (PureStore i a)) r => InterpreterFor (Store i a !! DbError) r Source #

newtype PureStore i a Source #

Constructors

PureStore (Map i (Uid i a)) 

Instances

Instances details
Ord i => Monoid (PureStore i a) Source # 
Instance details

Defined in Polysemy.Db.Interpreter.Store

Methods

mempty :: PureStore i a #

mappend :: PureStore i a -> PureStore i a -> PureStore i a #

mconcat :: [PureStore i a] -> PureStore i a #

Ord i => Semigroup (PureStore i a) Source # 
Instance details

Defined in Polysemy.Db.Interpreter.Store

Methods

(<>) :: PureStore i a -> PureStore i a -> PureStore i a #

sconcat :: NonEmpty (PureStore i a) -> PureStore i a #

stimes :: Integral b => b -> PureStore i a -> PureStore i a #

Generic (PureStore i a) Source # 
Instance details

Defined in Polysemy.Db.Interpreter.Store

Associated Types

type Rep (PureStore i a) :: Type -> Type #

Methods

from :: PureStore i a -> Rep (PureStore i a) x #

to :: Rep (PureStore i a) x -> PureStore i a #

(Show i, Show a) => Show (PureStore i a) Source # 
Instance details

Defined in Polysemy.Db.Interpreter.Store

Methods

showsPrec :: Int -> PureStore i a -> ShowS #

show :: PureStore i a -> String #

showList :: [PureStore i a] -> ShowS #

Default (PureStore i a) Source # 
Instance details

Defined in Polysemy.Db.Interpreter.Store

Methods

def :: PureStore i a #

(Eq i, Eq a) => Eq (PureStore i a) Source # 
Instance details

Defined in Polysemy.Db.Interpreter.Store

Methods

(==) :: PureStore i a -> PureStore i a -> Bool #

(/=) :: PureStore i a -> PureStore i a -> Bool #

type Rep (PureStore i a) Source # 
Instance details

Defined in Polysemy.Db.Interpreter.Store

type Rep (PureStore i a) = D1 ('MetaData "PureStore" "Polysemy.Db.Interpreter.Store" "polysemy-db-0.0.1.0-EOjm8REiHHR4cimfBw4Ew6" 'True) (C1 ('MetaCons "PureStore" 'PrefixI 'True) (S1 ('MetaSel ('Just "records") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Map i (Uid i a)))))

pureStore :: Ord i => [Uid i a] -> PureStore i a Source #

interpretQueryConc :: Ord i => QueryCheckResult f => Member (Embed IO) r => (q -> Uid i a -> Maybe d) -> [Uid i a] -> InterpreterFor (Query q (f d) !! DbError) r Source #

interpretQueryAtomicState :: forall i a d q f r. Member (AtomicState (PureStore i a)) r => QueryCheckResult f => (q -> Uid i a -> Maybe d) -> InterpreterFor (Query q (f d) !! DbError) r Source #

interpretQueryStoreConc :: Ord i => Show i => QueryCheckResult f => Member (Embed IO) r => (q -> Uid i a -> Maybe d) -> [Uid i a] -> InterpretersFor [Query q (f d) !! DbError, Store i a !! DbError, AtomicState (PureStore i a)] r Source #

interpretQueryStoreAny :: forall q d i e r. Member (Store i d !! e) r => (q -> d -> Bool) -> InterpreterFor (Query q Bool !! e) r Source #

interpretRandom :: forall a r. Random a => Member (Embed IO) r => InterpreterFor (Random a) r Source #

interpretRandomAtomic :: forall a q r. Random a => RandomGen q => Member (Embed IO) r => q -> InterpreterFor (Random a) r Source #

interpretRandomState :: forall a q r. Random a => RandomGen q => q -> InterpreterFor (Random a) r Source #

interpretIdNum :: forall i r. Member (Embed IO) r => Num i => InterpreterFor (Id i) r Source #

interpretIdNumFrom :: forall i r. Member (Embed IO) r => Num i => i -> InterpreterFor (Id i) r Source #

interpretIdNumLocal :: forall i r. Num i => InterpreterFor (Id i) r Source #

interpretIdList :: forall i r. Members [Error Text, Embed IO] r => [i] -> InterpreterFor (Id i) r Source #

interpretIdConst :: forall i r. i -> InterpreterFor (Id i) r Source #

interpretAtomicStateStore :: forall tag d err r. Members [QStore Maybe () d !! err, Lock @@ tag] r => Sem (Stop err ': r) d -> InterpreterFor (AtomicState d !! err) r Source #

Interpret AtomicState as a singleton table.

Given an action that produces an initial value, every action reads the value from the database and writes it back.

interpretAtomicStateStoreAs :: forall tag d err r. Members [QStore Maybe () d !! err, Lock @@ tag] r => d -> InterpreterFor (AtomicState d !! err) r Source #

Interpret AtomicState as a singleton table.

Given an initial value, every action reads the value from the database and writes it back.

interpretAtomicStateStoreScoped :: forall tag param d err r. Members [Scoped param (QStore Maybe () d !! err) !! err, Lock @@ tag] r => Sem (Stop err ': r) d -> InterpreterFor (Scoped param (AtomicState d !! err) !! err) r Source #

interpretAtomicStateStoreScopedAs :: forall tag param d err r. Members [Scoped param (QStore Maybe () d !! err) !! err, Lock @@ tag] r => d -> InterpreterFor (Scoped param (AtomicState d !! err) !! err) r Source #

interpretAtomicStatesStore :: forall tag param d err r. Members [QStore Maybe () d !! err, Scoped param (QStore Maybe () d !! err) !! err, Lock @@ tag] r => Sem (Stop err ': r) d -> InterpretersFor [AtomicState d !! err, Scoped param (AtomicState d !! err) !! err] r Source #

interpretReaderStore :: forall d e r. Member (QStore Maybe () d !! e) r => Sem r d -> InterpreterFor (Reader d !! e) r Source #

Interpret Reader as a singleton table.

Given an initial value, every action reads the value from the database, potentially writing it on first access.

interpretReaderStoreAs :: forall d e r. Member (QStore Maybe () d !! e) r => d -> InterpreterFor (Reader d !! e) r Source #

Config

data DbConfig Source #

Connection information for a database. >>> DbConfig "localhost" 5432 "users" "post" "gres"

Instances

Instances details
FromJSON DbConfig Source # 
Instance details

Defined in Polysemy.Db.Data.DbConfig

ToJSON DbConfig Source # 
Instance details

Defined in Polysemy.Db.Data.DbConfig

Generic DbConfig Source # 
Instance details

Defined in Polysemy.Db.Data.DbConfig

Associated Types

type Rep DbConfig :: Type -> Type #

Methods

from :: DbConfig -> Rep DbConfig x #

to :: Rep DbConfig x -> DbConfig #

Show DbConfig Source # 
Instance details

Defined in Polysemy.Db.Data.DbConfig

Eq DbConfig Source # 
Instance details

Defined in Polysemy.Db.Data.DbConfig

type Rep DbConfig Source # 
Instance details

Defined in Polysemy.Db.Data.DbConfig

newtype DbHost Source #

Constructors

DbHost 

Fields

Instances

Instances details
FromJSON DbHost Source # 
Instance details

Defined in Polysemy.Db.Data.DbHost

ToJSON DbHost Source # 
Instance details

Defined in Polysemy.Db.Data.DbHost

IsString DbHost Source # 
Instance details

Defined in Polysemy.Db.Data.DbHost

Methods

fromString :: String -> DbHost #

Generic DbHost Source # 
Instance details

Defined in Polysemy.Db.Data.DbHost

Associated Types

type Rep DbHost :: Type -> Type #

Methods

from :: DbHost -> Rep DbHost x #

to :: Rep DbHost x -> DbHost #

Show DbHost Source # 
Instance details

Defined in Polysemy.Db.Data.DbHost

Default DbHost Source # 
Instance details

Defined in Polysemy.Db.Data.DbHost

Methods

def :: DbHost #

Eq DbHost Source # 
Instance details

Defined in Polysemy.Db.Data.DbHost

Methods

(==) :: DbHost -> DbHost -> Bool #

(/=) :: DbHost -> DbHost -> Bool #

Ord DbHost Source # 
Instance details

Defined in Polysemy.Db.Data.DbHost

type Rep DbHost Source # 
Instance details

Defined in Polysemy.Db.Data.DbHost

type Rep DbHost = D1 ('MetaData "DbHost" "Polysemy.Db.Data.DbHost" "polysemy-db-0.0.1.0-EOjm8REiHHR4cimfBw4Ew6" 'True) (C1 ('MetaCons "DbHost" 'PrefixI 'True) (S1 ('MetaSel ('Just "unDbHost") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text)))

newtype DbPort Source #

Constructors

DbPort 

Fields

Instances

Instances details
FromJSON DbPort Source # 
Instance details

Defined in Polysemy.Db.Data.DbPort

ToJSON DbPort Source # 
Instance details

Defined in Polysemy.Db.Data.DbPort

Enum DbPort Source # 
Instance details

Defined in Polysemy.Db.Data.DbPort

Generic DbPort Source # 
Instance details

Defined in Polysemy.Db.Data.DbPort

Associated Types

type Rep DbPort :: Type -> Type #

Methods

from :: DbPort -> Rep DbPort x #

to :: Rep DbPort x -> DbPort #

Num DbPort Source # 
Instance details

Defined in Polysemy.Db.Data.DbPort

Read DbPort Source # 
Instance details

Defined in Polysemy.Db.Data.DbPort

Integral DbPort Source # 
Instance details

Defined in Polysemy.Db.Data.DbPort

Real DbPort Source # 
Instance details

Defined in Polysemy.Db.Data.DbPort

Show DbPort Source # 
Instance details

Defined in Polysemy.Db.Data.DbPort

Default DbPort Source # 
Instance details

Defined in Polysemy.Db.Data.DbPort

Methods

def :: DbPort #

Eq DbPort Source # 
Instance details

Defined in Polysemy.Db.Data.DbPort

Methods

(==) :: DbPort -> DbPort -> Bool #

(/=) :: DbPort -> DbPort -> Bool #

Ord DbPort Source # 
Instance details

Defined in Polysemy.Db.Data.DbPort

type Rep DbPort Source # 
Instance details

Defined in Polysemy.Db.Data.DbPort

type Rep DbPort = D1 ('MetaData "DbPort" "Polysemy.Db.Data.DbPort" "polysemy-db-0.0.1.0-EOjm8REiHHR4cimfBw4Ew6" 'True) (C1 ('MetaCons "DbPort" 'PrefixI 'True) (S1 ('MetaSel ('Just "unDbPort") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Int)))

newtype DbName Source #

Constructors

DbName 

Fields

Instances

Instances details
FromJSON DbName Source # 
Instance details

Defined in Polysemy.Db.Data.DbName

ToJSON DbName Source # 
Instance details

Defined in Polysemy.Db.Data.DbName

IsString DbName Source # 
Instance details

Defined in Polysemy.Db.Data.DbName

Methods

fromString :: String -> DbName #

Generic DbName Source # 
Instance details

Defined in Polysemy.Db.Data.DbName

Associated Types

type Rep DbName :: Type -> Type #

Methods

from :: DbName -> Rep DbName x #

to :: Rep DbName x -> DbName #

Show DbName Source # 
Instance details

Defined in Polysemy.Db.Data.DbName

Eq DbName Source # 
Instance details

Defined in Polysemy.Db.Data.DbName

Methods

(==) :: DbName -> DbName -> Bool #

(/=) :: DbName -> DbName -> Bool #

Ord DbName Source # 
Instance details

Defined in Polysemy.Db.Data.DbName

type Rep DbName Source # 
Instance details

Defined in Polysemy.Db.Data.DbName

type Rep DbName = D1 ('MetaData "DbName" "Polysemy.Db.Data.DbName" "polysemy-db-0.0.1.0-EOjm8REiHHR4cimfBw4Ew6" 'True) (C1 ('MetaCons "DbName" 'PrefixI 'True) (S1 ('MetaSel ('Just "unDbName") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text)))

newtype DbUser Source #

Constructors

DbUser 

Fields

Instances

Instances details
FromJSON DbUser Source # 
Instance details

Defined in Polysemy.Db.Data.DbUser

ToJSON DbUser Source # 
Instance details

Defined in Polysemy.Db.Data.DbUser

IsString DbUser Source # 
Instance details

Defined in Polysemy.Db.Data.DbUser

Methods

fromString :: String -> DbUser #

Generic DbUser Source # 
Instance details

Defined in Polysemy.Db.Data.DbUser

Associated Types

type Rep DbUser :: Type -> Type #

Methods

from :: DbUser -> Rep DbUser x #

to :: Rep DbUser x -> DbUser #

Show DbUser Source # 
Instance details

Defined in Polysemy.Db.Data.DbUser

Eq DbUser Source # 
Instance details

Defined in Polysemy.Db.Data.DbUser

Methods

(==) :: DbUser -> DbUser -> Bool #

(/=) :: DbUser -> DbUser -> Bool #

Ord DbUser Source # 
Instance details

Defined in Polysemy.Db.Data.DbUser

type Rep DbUser Source # 
Instance details

Defined in Polysemy.Db.Data.DbUser

type Rep DbUser = D1 ('MetaData "DbUser" "Polysemy.Db.Data.DbUser" "polysemy-db-0.0.1.0-EOjm8REiHHR4cimfBw4Ew6" 'True) (C1 ('MetaCons "DbUser" 'PrefixI 'True) (S1 ('MetaSel ('Just "unDbUser") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text)))

newtype DbPassword Source #

Constructors

DbPassword 

Fields

Instances

Instances details
FromJSON DbPassword Source # 
Instance details

Defined in Polysemy.Db.Data.DbPassword

ToJSON DbPassword Source # 
Instance details

Defined in Polysemy.Db.Data.DbPassword

IsString DbPassword Source # 
Instance details

Defined in Polysemy.Db.Data.DbPassword

Generic DbPassword Source # 
Instance details

Defined in Polysemy.Db.Data.DbPassword

Associated Types

type Rep DbPassword :: Type -> Type #

Show DbPassword Source # 
Instance details

Defined in Polysemy.Db.Data.DbPassword

Eq DbPassword Source # 
Instance details

Defined in Polysemy.Db.Data.DbPassword

Ord DbPassword Source # 
Instance details

Defined in Polysemy.Db.Data.DbPassword

type Rep DbPassword Source # 
Instance details

Defined in Polysemy.Db.Data.DbPassword

type Rep DbPassword = D1 ('MetaData "DbPassword" "Polysemy.Db.Data.DbPassword" "polysemy-db-0.0.1.0-EOjm8REiHHR4cimfBw4Ew6" 'True) (C1 ('MetaCons "DbPassword" 'PrefixI 'True) (S1 ('MetaSel ('Just "unDbPassword") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text)))

Errors

data DbError Source #

Instances

Instances details
IsString DbError Source # 
Instance details

Defined in Polysemy.Db.Data.DbError

Methods

fromString :: String -> DbError #

Show DbError Source # 
Instance details

Defined in Polysemy.Db.Data.DbError

Eq DbError Source # 
Instance details

Defined in Polysemy.Db.Data.DbError

Methods

(==) :: DbError -> DbError -> Bool #

(/=) :: DbError -> DbError -> Bool #

newtype InitDbError Source #

Constructors

InitDbError 

Fields

Instances

Instances details
IsString InitDbError Source # 
Instance details

Defined in Polysemy.Db.Data.InitDbError

Generic InitDbError Source # 
Instance details

Defined in Polysemy.Db.Data.InitDbError

Associated Types

type Rep InitDbError :: Type -> Type #

Show InitDbError Source # 
Instance details

Defined in Polysemy.Db.Data.InitDbError

Eq InitDbError Source # 
Instance details

Defined in Polysemy.Db.Data.InitDbError

Ord InitDbError Source # 
Instance details

Defined in Polysemy.Db.Data.InitDbError

type Rep InitDbError Source # 
Instance details

Defined in Polysemy.Db.Data.InitDbError

type Rep InitDbError = D1 ('MetaData "InitDbError" "Polysemy.Db.Data.InitDbError" "polysemy-db-0.0.1.0-EOjm8REiHHR4cimfBw4Ew6" 'True) (C1 ('MetaCons "InitDbError" 'PrefixI 'True) (S1 ('MetaSel ('Just "unInitDbError") 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Text)))

data DbConnectionError Source #

Instances

Instances details
Generic DbConnectionError Source # 
Instance details

Defined in Polysemy.Db.Data.DbConnectionError

Associated Types

type Rep DbConnectionError :: Type -> Type #

Show DbConnectionError Source # 
Instance details

Defined in Polysemy.Db.Data.DbConnectionError

Eq DbConnectionError Source # 
Instance details

Defined in Polysemy.Db.Data.DbConnectionError

type Rep DbConnectionError Source # 
Instance details

Defined in Polysemy.Db.Data.DbConnectionError