---- Just use PostgreSQL simple
- Esquilito, not comprehensive. I vaguely remember let through some bad SQL too
---- Use Beam
- Servant: the type level stuff is poorly executed nerd skateboarding. It either should be:
---- less type level and more simple-stupid
---- Use data kinds so the type level is less "un-kinded" and catch a lot of mistakes before they become horrible term-level errors.
I use github.com/obsidiansystems/obelisk/ at work (I work at the place that makes it). It does it's own thing for user-visible routes (for frontend and backend because automatic prerendering). It does a different thing for requests and live queries all of which are over websockets for simplicity.
Our routes stuff should be pulled out as a generic dual parsing-prettyprinting library (it and https://hackage.haskell.org/package/tomland are the same basic ideal, just need to remove the concrete HTTP / TOML specifics to get to the commonality).
I once started throwing together like servant but using data kinds in https://github.com/ericson2314/matrix-client