cd /news/ai-agents/llmll-a-language-for-agent-written-c… · home › topics › ai-agents › article
[ARTICLE · art-161167] src=discourse.haskell.org ↗ pub= topic=ai-agents verified=true sentiment=↑ positive

LLMLL: a language for agent-written code, with a Haskell compiler that emits liquid-fixpoint constraints directly

A developer writing under the handle machunter has released LLMLL, a programming language designed for LLM agents to write code, in which each function begins as a typed contract with a hole that an agent fills; the Haskell compiler checks the fill against predicates and preconditions/postconditions with Z3 before the patch is integrated into the AST, rejecting any body the solver cannot prove. The solver covers linear integer arithmetic, booleans, non-recursive sums, pairs, fixed-size bytes, maps and string literals, and outside that scope a postcondition is assumed and the tool says so by name. All code, including the Haskell compiler, was written by LLM agents, with the author acting as technical director, and the compiler emits liquid-fixpoint constraints directly rather than generating Liquid Haskell annotations, pinned to liquid-fixpoint 0.9.6.3.1 on GHC 9.6.

read2 min views1 publishedOct 30, 2026

LLMLL is a language I’ve been building to experiment with AI (LLMs) writing code. A function starts as a contract with a typed hole for the body. The contract is a typed signature, optionally refined with predicates ((where [x: int] (> x 0))), plus a precondition and a postcondition. When an agent attempts to fill the hole, the fill must type-check, and then the compiler checks it against the predicates and conditions with Z3 before the patch is integrated into the AST. A body the solver can’t prove is rejected, and the program is left as it was.

The idea is that multiple, potentially specialized, agents work in parallel to fill all the holes at once.

All of the code, the Haskell compiler included, was written by LLM agents. My role was that of a technical director.

The parts this forum might find interesting:

Scope, so nobody has to ask: the solver covers linear integer arithmetic, booleans, non-recursive sums, pairs, fixed-size bytes, maps and string literals. Outside that, a postcondition is assumed and the tool says so by name. A proof shows the body matches the contract, not that the contract is right.

A two-minute demo, using Apple’s goto-fail bug as the invariant (a scripted wrong body rejected, then a guarded one accepted): LLMLL: a goto-fail body, rejected before the edit lands | LLMLL

You can try the rejection yourself: the demo page has a one-line Docker command.

Two questions I’d value opinions on from people who know this stack:

  1. Emitting .fq directly rather than generating Liquid Haskell annotations gave me control over the constraint shape, but it means maintaining my own VC generator. Is there a reason I’ll regret not going through LH?

  2. I’m pinned to liquid-fixpoint 0.9.6.3.1 on GHC 9.6. What’s the least painful way to keep up as Liquid Haskell and liquid-fixpoint move to newer GHCs?

── more in #ai-agents 4 stories · sorted by recency
── more on @llmll 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
→ Live at https://your-agent.zahid.host ✓
Get free account → Pricing
from €0/mo · no card required
LIVE [news/llmll-a-language-for…] indexed:0 read:2min 2026-10-30 · —