úÎ!VhPÚV      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUSafe-.=?HUVXk6'Vribbit3Convert a type-level list of strings into a value. ribbitInsert statement. ribbit#Render a type-level query as text. WribbitrStrip redundant unit types out of a string of types. This is used mainly to help simplify the implementation of .Xribbit€Normalize nested type strings to be right associative. Mainly used to help simplify the implementation of other type families.ribbitIType level check to see if the field is actually contained in the schema Yribbit Helper for 6. Reduces the number of equations required, because J doesn't actually care about which conditionl operator it is inspecting.ribbitUProduce the type represeting the placeholder ("?") values in a paramaterized query.ribbit,Produce the type of rows return by a query. Zribbit_Rename the fields in a given schema to reflect an applied table alias. For instance, data Fooribbit—Type class for defining your own tables. The primary way for you to introduce a new schema is to instantiate this type class for one of your types.E.g.: ×data MyTable instance Table MyTable where type Name MyTable = "my_table" type DBSchema MyTable = Field "id" Int :> Field "my_non_nullable_text_field" Text :> Field "my_nullable_int_field" (Maybe Int) ribbitString two types together. [   [   [0 is similar in principal to the nested tuple ([, ([, [L)), but looks a whole lot nicer when the number of elements becomes large.7This is how you build up a schema from a collection of   types.E.g.: ?Field "foo" Int :> Field "bar" Text :> Field "baz" (Maybe Text)úIt also the mechanism by which this library builds up the Haskell types for query parameters and resulting rows that get returned. So if you have a query that accepts three text query parameters, that type represented in Haskell is going to be (\ ]   \ ]   \ ]).hIf that query returns rows that contain a Text, an Int, and a Text, then the type of the rows will be (\ ]   \ [   \ ]). ribbit+Define a field in a database schema, where:nameW: is the name of the database column, expressed as a type-level string literal, andtyp<: is the Haskell type whose values get stored in the column.E.g:   "company_name" ]   "expiration_date" (^ ) ribbitD"?" combinator, used to indicate the presence of a query parameter. ribbitNOT conditional combinator. ribbitASD combinator, used for attaching a name to a table in a FROM clause. ribbit)Cross product operator for FROM clauses. ribbitOR combinator for conditions. ribbitAND combinator for conditions. ribbit ">=" combinator for conditions. ribbit">" combinator for conditions. ribbit "<=" combinator for conditions. ribbit"<" combinator for conditions. ribbit "!=" combinator for conditions. ribbit"=" combinator for conditions. ribbitWHERE7 combinator, used for attaching conditions to a query. ribbitFROMT combinator, used for attaching a SELECT projection to a relation in the database.ribbitSELECT! combinator, used for starting a SELECT statement. _ribbitLike `-, but produce any kind of string-like thing. ribbitCross product       5 587789 9 9 9 9 9 66None-.;=>?HMUVXkP^ 3ribbitBMake sure the fields in the list are actually part of the schema. aribbit.Wrapper that helps us avoid orphan instances. 4ribbitLike b., but defined here to avoid orphan instances. 5ribbitLike c7, but defined here so we can avoid orphaned instances. 6ribbityRepresents the "base" PostgreSQL type. We say "base" type because whether the type is nullable is handle automatically.e.g. PsqlType "integer" #PsqlType "timestamp with time zone":ribbitfGiven a Haskell type, produce the PostgreSQL type of columns that store values of that haskell type.>ribbit:Execute a query against a PostgreSQL database connection. ?ribbitExecute a statement. @ribbit+Create the indicated table in the database.See A for details.Aribbit-Produce the statement used to create a table.€In this example, we create an employee table with a multi-part primary key, one nullable field, and a few non-nullable fields. ÿedata Employee instance Table Employee where type Name = "employees" type DBSchema = Field "company_id" Int :> Field "id" Int :> Field "name" Text :> Field "quit_date" (Maybe Day) let primaryKey :: Proxy '["company_id", "id"] primaryKey = Proxy table :: Proxy Employee table = Proxy in createTableStatement primaryKey table This will produce the statement: Ž"create table employees (company_id integer not null, id integer not null, name text not null, quit_date date, primary key (company_id, id));"dribbitLike `-, but produce any kind of string-like thing. 3456789:;<=>?@A:;678>?@A=<9354e      !"#$%&'()*+,-./0123456789::;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijgkjlmn8mo9jp%ribbit-0.3.0.0-Cg8ZWGIhJjV4zFwYSlwQcJDatabase.RibbitDatabase.Ribbit.PostgreSQL Data.TimeDay InsertIntoRenderrender ValidFieldArgsType ResultTypeTableNameDBSchemaProjectionType:>Field?NotAsXOrAndGteGtLteLt NotEqualsEqualsWhereFromSelect $fTableTYPEX $fRenderTYPE?$fRenderTYPEExpr$fRenderTYPEExpr0$fRenderTYPEOr$fRenderTYPEAnd$fRenderTYPELte$fRenderTYPELt$fRenderTYPEGte$fRenderTYPEGt$fRenderTYPENot$fRenderTYPENotEquals$fRenderTYPEEquals$fRenderTYPEWhere$fRenderTYPEFrom$fRenderTYPESelect$fReflectFields[]:$fReflectFields[][]$fRenderTYPEInsertInto $fRender[]:$fEq:>$fOrd:>$fShow:>IsSubsetToRowFromRowPsqlType unPsqlType HasIsNullable HasPsqlTypepsqlType HasPsqlTypes HasFieldsqueryexecute createTablecreateTableStatement$fHasFields[]:$fHasFields[][]$fHasFieldsTYPE:>$fHasFieldsTYPEField$fHasIsNullableka$fHasIsNullableTYPEMaybe$fHasPsqlTypeTYPEDay$fHasPsqlTypeTYPEInt$fHasPsqlTypeTYPEText$fHasPsqlTypeTYPEMaybe$fHasPsqlTypesTYPE:>$fHasPsqlTypesTYPEField $fFromRowOnly $fFromRow:> $fToRow() $fToRowOnly $fToRow:> $fToRowWrap $fFromRowWrap$fIsStringPsqlType ReflectFields StripUnitFlatten ConditionAliasAsghc-prim GHC.TypesIntOnly-0.1-4eYnxvcrr7tEbYgCvIkHLbData.Tuple.OnlyOnly text-1.2.3.1Data.Text.InternalTextbase GHC.MaybeMaybe symbolVal GHC.TypeLitsWrap.postgresql-simple-0.6.2-BN6We3ZudWpEMaySprWrWX Database.PostgreSQL.Simple.ToRow"Database.PostgreSQL.Simple.FromRow