Hey! Hey! Can u rel8?
Go to file
Shane O'Brien d63063940d
Simplify eval to run directly inside the Query monad
@tomjaguarpaw at ZuriHac questioned whether the `Evaluation` monad was really unnecessary.

And yes, it turns out that the `Evaluation` monad wasn't actually really adding any value. The real issue was Postgres's unspecified evaluation order (which in practice behaved like the broken `ListT` from transformers).

We now maintain a stack of bindings from previous subselects in the `Query` monad, which future queries can reference. So for `evalulation`, to ensure that Postgres doesn't try to run a function once where we expect it to be run multiple times, we modify the expression to contain a bunch of superfluous lateral references to the previous queries. This ensures that it gets run every time.
2021-06-22 11:50:34 +01:00
.github/workflows Update build.yaml 2021-04-08 13:01:16 +01:00
docs Correct "readabality" typo (#66) 2021-06-21 15:54:19 +01:00
nix Upgrade Haskell.nix and remove data-serializer workaround 2021-04-10 13:46:32 +01:00
src Simplify eval to run directly inside the Query monad 2021-06-22 11:50:34 +01:00
tests Simplify eval to run directly inside the Query monad 2021-06-22 11:50:34 +01:00
.gitignore The beginning of rel8 1.0 2021-03-23 13:34:02 +00:00
cabal.project Add allow-newer: Cabal for entropy 2021-04-02 18:03:18 +01:00
cabal.project.haskell-nix Sketch of HKD-lifting of Generic types 2021-04-16 15:17:39 +01:00
Changelog.md Release 1.0.0.1 2021-06-21 11:46:16 +01:00
default.nix Sketch of HKD-lifting of Generic types 2021-04-16 15:17:39 +01:00
LICENSE Bump copyright year 2021-06-18 18:24:31 +01:00
README.md Create README.md 2021-04-02 17:43:15 +01:00
rel8.cabal Release 1.0.0.1 2021-06-21 11:46:16 +01:00
shell.nix GHC 9 support 2021-04-07 14:58:33 +01:00

Welcome!

Welcome to Rel8! Rel8 is a Haskell library for interacting with PostgreSQL databases, built on top of the fantastic Opaleye library.

The main objectives of Rel8 are:

  • Conciseness: Users using Rel8 should not need to write boiler-plate code. By using expressive types, we can provide sufficient information for the compiler to infer code whenever possible.

  • Inferrable: Despite using a lot of type level magic, Rel8 aims to have excellent and predictable type inference.

  • Familiar: writing Rel8 queries should feel like normal Haskell programming.

For more details, check out the official documentation.