{
  "$type": "site.standard.document",
  "bskyPostRef": {
    "cid": "bafyreic2u3gzsp3yihw77ic5ldthoy2wdwgwxcnhnoyrcsinkvdqpzfyn4",
    "uri": "at://did:plc:pi6woz4d47bkuws673w2il2r/app.bsky.feed.post/3mijfgxzky4o2"
  },
  "path": "/t/ann-pgenie-a-sql-first-code-generator-for-postgresql-no-dsls-no-orms-no-hand-rolled-codecs/13869#post_5",
  "publishedAt": "2026-04-02T10:50:10.000Z",
  "site": "https://discourse.haskell.org",
  "tags": [
    "maintained",
    "in the docs"
  ],
  "textContent": "dnikolovv:\n\n> the only changes I would do is be more explicit about the naming (even if that means changing the `.Types` namespace to `.Tables` or something more obviously database-related).\n\nI hear you. The `Types` namespace may ring different meanings to users (like domain-types). `Tables` however would definitely be wrong, because this namespace holds user-defined types, not tables. Actually during development that namespace was initially called `CustomTypes`, but then I reduced it for brevity.\n\nAny way, I have several good news on the matter:\n\n  1. The codegen is maintained separately from the main codebase as a Dhall program. You can fork it, do whatever tweaks you need and start using it immediately by doing nothing more than referring to your fork in the pGenie project file, as explained in the docs. Also such changes are trivial to handle for LLMs, so you don’t even need to delve into the codebase at all.\n\n  2. Although the Haskell codegen doesn’t yet have any configurable parameters, configuration of codegens is supported, so similar opinion-related issues can simply be turned into codegen-specific config options.\n\n\n",
  "title": "ANN: pGenie – a SQL-first code generator for PostgreSQL: no DSLs, no ORMs, no hand-rolled codecs"
}