!       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                               None,.17=>?@AHMUVX_ek!tswebnewtype wrapper around g that only exports read-only operations (currently runSelectReturningOne and runSelectReturningList).tswebGclass of read-only Beam operations - this has one obvious instance in  itself, plus it lets us create a read-only alias in order to restrict views to only reading from the database pool (where appropriate).tswebjType alias to handle the beam 0.7 - 0.8 API change that replaced PgSelectSyntax with just plain Postgres.  "!%$#('&+*)-,./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxy{z|}~      %$#"!('&-,+*)210/.3456789:;<=>?@BACDEFGHIJKMLNOPQRTSUVWXYZ[\]^_`abcdefghikjlmnopqtsruzyxwv}|{~  "!%$#('&+*)-,./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxy{z|}~      %$#"!('&-,+*)210/.3456789:;<=>?@BACDEFGHIJKMLNOPQRTSUVWXYZ[\]^_`abcdefghikjlmnopqtsruzyxwv}|{~1Beam table definition for a generic Spock sessionNone,.17=>?@AHUVX_ek7tswebSession primary keytswebConcrete sessiontsweb3A generic Beam table to store a Spock session. The F should be your useful info, like a logged-in user or whatever. See TsWeb.Tables.Session.Test9 for a type-checking but not very function idea of what % could look like, or the code under  @ for a fully-functional (but dumb) webapp using all this stuff.tswebSpock-generated session IDtswebSession's CSRF tokentsweb Expiration date for this sessiontswebUser-defined session data sWeb types for TsWebNone,.17=>?@AHUVX_ek@tswebWrapper around  to use  and tswebWrapper around  to use  and tswebWrapper around + to suppress spock's database and web_statetswebA container for a  of tagged Spock paths and a  of view contextual data.The paths are built with  % and friends, and are queried using  / .-Context extras are currently populated using   and (; probably more will be added as needed.tswebTagged paths for web contexttsweb Free-form extras for web context'Spock actions for interacting with the None,.17=>?@AHUVX_ekRPtsweb@Look up a tagged path in a view. If we have a route looking like    ro rw $   #user ("users" <//> var) (  user) ,then a view could access that user path with % users <- getPath #user let txt =  users "bob" tswebLook up a path and render it. This returns a sort-of variadic function that can be provided with the right number of arguments in order to render a path. As with the above example, a route like this:    ro rw $   #user ("users" <//> var) (  user) could be rendered like this: 6 usersfn <- showPath #user let txt = usersfn "bob" or, more succinctly: & txt <- ($ "bob") <$> showPath $user tsweb#Look up data that was put into the  part of the action's context. This is pretty bound up with type signatures and other verbosity, but if we have a database-writing view like so:    ro rw $   #root  (  $   index) .then that index view could be written like so:  index ::  n  xs => H lts xs sess a index = do db :: ReadWritePool <- getExtra ... *Database-specific types and core functionsNone,.17=>?@AHUVX_ekqtswebInt alias for the  function  maxResources argumenttswebInt alias for the  function  numStripes argumenttsweb4String alias for the postgres database to connect totsweb0String alias for the postgres host to connect totsweb1Pool of read-write connections. Instantiate with tsweb0Pool of read-only connections. Instantiate with tsweb1Concrete read-write connection. Instantiate with tsweb0Concrete read-only connection. Instantiate with tswebWrapper for some sort of Postgres connection; a raw `SomeConn t` represents either a read-only or a read-write connection, but the concrete  and % are probably more useful in general.tsweb,Empty type to mark read-write db connectionstsweb+Empty type to mark read-only db connectionstswebAn example of how  Database.Beam] does counts; this really doesn't belong here, and was just written for preliminary testing.tsweb]Create a resource pool of either read-only or read-write postgres connections. The docs for / give the best description for how this works.tswebRun an action in a  connectiontsweb Create a  or  postgres connection. This doesn't actually check whether the connection is read-only or read-write, so it's really just to help with type juggling.tsweb+Run an action within a postgresql savepointtsweb-Run an action within a postgresql transactiontswebRun a read-only query; this will actually run any query at all, so higher-level logic should ensure that only read-only queries hit this function.tswebSame as ", but prints any SQL that it runs.tsweb#Run a query against a ReadWriteConntswebSame as ., but printing all the SQL that gets executed.tswebPostgres hostname/addresstswebPostgres database nametswebUser to connect astsweb+Number of sub-pools to maintain (1 is fine)tsweb,How long to let an idle db connection lingertsweb$Max number of connections per stripe%Spock Session implementation for BeamNone,.17=>?@AHUVX_ek}tswebTypeclass for user-supplied data. We really just need to know whether the user has set a remember-me indicator upon login so that the session's lifespan can be intelligently controlled. If your session never needs to be remembers, then rememberMe = const False should suffice.tsweb4Should the associated session be stored permanently?tswebUpdate a spock configuration stanza to replace its default session with one backed by postgres. This will typically be used like so:  spockCfg <-  (_dbSession db) ropool rwpool  $  sess PCNoDatabase ()  port (7 spockCfg routes) where sess = ... routes = ... #Test module to be sure the generic  is saneNone,.17=>?@AHUVX_ektsweb,Beam database definition to hold our sessiontsweb#Spock session alias to use our UsertswebConcrete type for userstswebSome sample user infotswebBeam database instancetswebYSample of patch to be sure that all the types work enough to make a spock config wrapper  Auth hook for routingNone,.17=>?@AHUVX_ektswebA class for session data that needs to be statically verified against routes. This could be checks for optional session info, or to validate the value of that session information.tswebKLoad a value out of the session or return Nothing. Used in the context of z, the wrapped view will only be called when this returns Just; a Nothing value will cause the wrapped view to be skipped.tswebGuarantee that the Spock session hold some verified piece of data. If the requisite data can be loaded, then the view is called with the data in its ctxExtras; otherwise $ is called and the view is skipped. Tagged routes for SpockNone,.17=>?@AHUVX_ekGtswebReader monad to pass one $ to potentially multiple different  'get'/'post' /etc calls.tswebConvert a chain of  calls into a  instance. This takes a  and a  in order to operate the  and  calls.tsweb6Describe a path for routing. This both builds up the \ monad and associates the given label with the URL so that views can look up the URL using  &c.tsweb Raise up a  to have  in its extras record.tsweb<Run this view whether the client did a GET or a POST requesttsweb"Run this view only on GET requeststsweb#Run this view only on POST requeststsweb"Read-only postgres connection pooltsweb#Read-write postgres connection pooltsweb"Chain of functions built up using  callstswebLabel for this URL pathtsweb for viewstswebRouting monad built from  /  / &ctswebResult of previous  call, or initial data from  Clay CSS helperNone,.17=>?@AHUVX_ektswebServe a  instance. The rendered CSS will be served from a .css file whose name is derived from the rendered sheet's contents. This has two results: changing the stylesheet will change the sheet's full URL, and the stylesheet really needs to be referenced by label, using something like . The first one of those is actually really nice, since browsers are so aggressive about caching css. The second one is more convenient anyhow, so this function is just pretty nice.tswebLabel to access this stylesheettswebBase URL for this sheettsweb instance to serve Beam actions for SpockNone,.17=>?@AHUVX_ekBtswebbThe result of a select, insert, update, or delete operation. This adds a constraint error to the @, making it nicer to filter out conflicts when handling errors.tswebResult of a select operation. This will either succeed with a QSimply, or fail with a QError (probably then an error in the db connection or table definitions).tsweb]Transaction option: provide WithTx to wrap operations in BEGIN/COMMIT, or NoTx to skip that.tswebRun one or many Beam  or - operation(s) against a view's ReadOnlyPool.tswebRun a single Beam ", returning a single (Maybe) valuetswebRun a single Beam , returning a list of valuestswebRun any arbitrary / monad in the context of a view, returning an  !" #$ %& %' ()*+,*+-*+.*+/*+0*+1*+2*+3*+4*+5*+6*+7*+8*+9*+:*+;*+<*+=*+>*+?*+@*+A*+B*+C*+D*+E*+F*+G*+H*+H*+I*+J*+J*+K*+L*+L*+M*+N*+N*+O*+O*PQ*PR*PS*PT*PU*PV*PW*PX*PY*PZ*P[*P\*P]*P^*P_*P`*Pa*Pb*Pc*Pd*Pe*Pf*Pg*Ph*Pi*Pj*Pk*Pl*Pm*Pn*Po*Pp*Pq*Pr*Ps*Pt*Pu*Pv*Pw*Px*Py*Pz*P{*P|*P}*P~*P*P************************************************************************************************************************************ * * * * ****************** *!*"*#*$*$*%&*%'*%(*%)*%**%+*%,*%-*%-*%.*%/*01*02*03*04*05*06*07*08*09*0:*0;*0<*0=*0>*0?*0@*0A*0B*0C*0D*0E*0F*0G*0H*0I*0J*0K*0L*0M*0N*0O*0P*0Q*0R*0S*0T*0U*0V*0W*0X*0Y*0Z*0[*\]*\^*\_*\`*\a*\b*\c*\d*\e*\f*\g*\h*ij*ik*il*im*no*np*nq*nr*ns*nt*nu*nv*nw*nx*ny*nx*nz*n{*|}*|~*|*|******************************************                                !"#$%&'(%&)*+,*+-./012345678"tsweb-0.1.2-6Uoi2PlYbp7HzeLSaj3b78 TsWeb.Db.BeamTsWeb.Tables.Session TsWeb.Types TsWeb.ActionTsWeb.Types.Db TsWeb.SessionTsWeb.Tables.Session.TestTsWeb.Routing.Auth TsWeb.RoutingTsWeb.Routing.ClayTsWeb.Db Example.MainmainpathgetPathshowPathdbwriteauthrunrouteget Web.Spockroot ReadWritePoolWeb.Spock.ConfigdefaultSpockCfgrunSpockspock Database.BeamrunSelectReturningListrunSelectReturningOnePgbaseData.Typeable.InternalTypeable GHC.GenericsGenericControl.Monad.IO.ClassliftIOMonadIOData.Functor.IdentityIdentity(beam-core-0.8.0.0-7dIF6xYf5YKKQzrKJbvrJnDatabase.Beam.Query runDeletedelete runUpdatesavetoUpdatedValueMaybetoUpdatedValue toOldValue toNewValue setFieldsTosetupdateTableRow updateTable updateRowupdate insertFrom insertData insertValuesinsertExpressions runInsertinsert insertOnly dumpSqlSelectlookup_ selectWithselect QBaseScope QGenExprTable QExprTable SqlSelectSqlInsertNoRows SqlInsertSqlInsertValuesEmptySqlInsertValuesSqlIdentityUpdate SqlUpdate SqlDeleteDatabase.Beam.Query.ExtensionsregrSXY_regrSYY_regrSXX_ regrAvgX_ regrAvgY_ regrRSquared_ regrCount_regrIntercept_ regrSlope_corr_ covarSamp_ covarPop_ regrSXYOver_ regrSYYOver_ regrSXXOver_ regrAvgXOver_ regrAvgYOver_regrRSquaredOver_regrCountOver_regrInterceptOver_regrSlopeOver_ corrOver_covarSampOver_ covarPopOver_varSamp_varPop_ stddevSamp_ stddevPop_ varSampOver_ varPopOver_stddevSampOver_stddevPopOver_**.floor_ceiling_sqrt_exp_ln_ nthValue_ lastValue_ firstValue_lagWithDefault_leadWithDefault_lag_lead_lag1_lead1_ntile_Database.Beam.Query.Aggregateany_some_every_ filterWhere_' filterWhere_anyOver_ someOver_ everyOver_ countOver_sumOver_avgOver_maxOver_minOver_rank_ rowNumber_ denseRank_ percentRank_ cumeDist_count_ countAll_sum_avg_max_min_allInGroupExplicitly_distinctInGroup_ allInGroup_ aggregate_group_ QGroupable!Database.Beam.Query.RelationshipsmanyToManyPassthrough_ manyToMany_ oneToMaybe_oneToManyOptional_ oneToOne_ oneToMany_OneToOne OneToMany OneToMaybeOneToManyOptional ManyToManyManyToManyThroughDatabase.Beam.Query.Combinators<|>. fromMaybe_ coalesce_if_else_then_'then_desc_asc_ nullsLast_ nullsFirst_orderBy_ withWindow_over_frame_orderPartitionBy_ partitionBy_noOrder_ noPartition_nrows_ unbounded_bounds_ fromBound_ noBounds_default_as_ exceptAll_except_ intersectAll_ intersect_ unionAll_union_current_trim_upper_lower_ position_currentTimestamp_ bitLength_ octetLength_ charLength_ subquery_ distinct_unique_exists_offset_limit_nub_ references_ relatedBy_' relatedBy_related_filter_'filter_guard_'guard_ subselect_ leftJoin_' leftJoin_ outerJoin_' outerJoin_perhaps_join_'join_values_ allFromView_all_<-.HaskellLiteralForQExprSqlValableTableval_ SqlValable SqlOrderablenothing_just_ SqlJustableQIfCondQIfElsemaybe_ isNothing_isJust_SqlDeconstructMaybeDatabase.Beam.Query.CTEreuse selectingWith ReusableQDatabase.Beam.Query.CustomSQLagg_ valueExpr_ renderSyntaxcustomExprSyntaxCustomSqlSyntaxIsCustomSqlSyntax customExpr_IsCustomExprFnDatabase.Beam.Query.DataTypes maybeTypearraybinaryLargeObjectcharacterLargeObjectbooleantime timestamp timestamptznumericdouble nationalCharnationalVarcharvarcharchardate varbinarybinarybigintsmallintintcast_DataTypeDatabase.Beam.Query.Extractday_month_year_seconds_minutes_hour_extract_ ExtractField HasSqlTime HasSqlDateDatabase.Beam.Query.Ordin_between_anyIn_anyOf_allIn_allOf_fromPossiblyNullBool_possiblyNullBool_ unknownAs_ isNotUnknown_ isUnknown_ isNotFalse_isFalse_ isNotTrue_isTrue_sqlBool_ QQuantified/=?.==?./=.==.SqlEq/=*.==*.SqlEqQuantified sqlNeqTriE sqlEqTriEsqlNeqEsqlEqEHasSqlEqualityChecksqlQNeqEsqlQEqEHasSqlQuantifiedEqualityCheck>=.<=.>.<.SqlOrd>=*.<=*.>*.<*.SqlOrdQuantifiedDatabase.Beam.Query.Operatorconcat_mod_div_sqlNot_not_ similarTo_like_||?.&&?.||.&&.SqlBoolDatabase.Beam.Query.TypesQExprToIdentity QExprToField buildSqlQuery HasQBuilderDatabase.Beam.Query.InternalQQField QAssignmentQFieldAssignmentQAggregateContextQGroupingContext QValueContextQWindowingContextQWindowFrameContextQExprQGenExprQWindow ProjectibleDatabase.Beam.Schema.LensesdbLenses tableLenses TableLensDatabase.Beam.Schema.TablesdefTblFieldSettingspk fieldName fieldNamedmodifyTableFields setEntityNamemodifyEntityName modifyTablewithTableModificationwithDbModificationtableModificationdbModificationdefaultDbSettingsDatabaseDatabaseModificationEntityModificationFieldModification TableEntityDatabaseEntityDatabaseSettingsLensesLensForColumnarC Columnar' TableField TableSettings HaskellTable primaryKey PrimaryKeyTableBeamableDatabase.Beam.Backend.SQLrunReturningListrunReturningOne runNoReturnrunReturningMany MonadBeamDatabase.Beam.Backend.SQL.Row valuesNeededfromBackendRowFromBackendRowDatabase.Beam.Backend.TypesNullableRoPg _fromRoPg ReadOnlyMSel $fReadOnlyMPg$fReadOnlyMRoPg $fFunctorRoPg$fApplicativeRoPg $fMonadRoPg SessionIdSessionSessionT _sessionId _sessionCsrf_sessionExpires _sessionData$fTableSessionT$fBeamableSessionT$fBeamablePrimaryKey$fGenericPrimaryKey$fGenericSessionT $fOrdSessionT$fOrdPrimaryKey $fEqSessionT$fEqPrimaryKey$fShowSessionT$fShowPrimaryKey TsSpockCtxT TsActionCtxT TsWebStateMContextctxPaths ctxExtrasgetExtraKeepOpenSubPoolsDbNameHostName ReadOnlyPool ReadWriteConn ReadOnlyConnSomeConn ReadWriteReadOnlycountpoolwithConnectionconnect withSavepointwithTransactionreadOnly readOnlyDebug readWritereadWriteDebugUserData rememberMe patchConfig$fFunctorTxAction $fMonadFree$fApplicativeFree $fFunctorFree $fShowFreeDbsessionSessUsers UsersMixinAddressloginidmasqidrememberdbpatch$fBeamableUsersMixin$fUserDataUsersMixin$fDatabasebeDb$fGenericUsersMixin $fGenericDb Authorize checkAuthRoutingMgetpostpostclay ExecResultESimply EConstraintEError QueryResultQSimplyQErrorTxOptNoTxWithTxquery queryMaybe queryListexecute $fEqTxOpt $fOrdTxOpt $fEnumTxOpt$fBoundedTxOpt $fShowTxOpt$fEqQueryResult$fShowQueryResult$fEqExecResult$fShowExecResult,beam-postgres-0.4.0.0-KFOZRnQR6YA7h28pAxF7w3!Database.Beam.Postgres.Connection*Spock-core-0.13.0.0-2rDld7qXpM9C2mlxKI8oLaWeb.Spock.Core SpockCtxTWeb.Spock.Internal.Wire ActionCtxT%Spock-0.13.0.0-EcLX361gwYcHzM2XTOpR3IWeb.Spock.Internal.Types WebStateM*superrecord-0.5.0.1-4q5QwX9Ik3BAoGP7jugwKc SuperRecordRec$hvect-0.4.0.0-3dqGVvEpS5LFQ3h18xF99P Data.HVectHVect renderRoute ListContains,resource-pool-0.2.3.2-8m7Laib0Fcq4nTKplUB4Pz Data.Pool createPoolPoolWeb.Spock.Internal.CoreActionjumpNext&reroute-0.5.0.0-Hkp3qqANObH6g6pLadmqe8Web.Routing.CombinatorsPathWeb.Spock.RoutingRouteM"clay-0.13.1-1AFBToDvFwRLZCAKynDc0MClay.StylesheetCss