# Locque Authoring

> Author or update Locque .lq code and tests with the canonical M-expr syntax, CBPV rules, data/match forms, modules/imports/opens, and project conventions.

- Skill: `aibot88/locque-authoring` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add aibot88/locque-authoring`
- Raw SKILL.md: https://api.skillmd.com/api/skills/aibot88/locque-authoring/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: aibot88 (https://skillmd.com/u/aibot88)
- Updated: 2026-09-09
- Page: https://skillmd.com/skills/aibot88/locque-authoring

---


# Locque authoring

Use this skill when writing or editing Locque source or tests.

## Sources of truth

- `grammar.md` defines the canonical syntax and S-expr mapping.
- `AGENTS.md` lists project conventions and tooling.

## Workflow

1. Prefer `.lq` M-expr files; do not handwrite `.lqs`.
2. Keep paths lowercase. Every `lib/**` file must have a matching `test/**` file.
3. Use `Module::name` qualification; `open Alias exposing ... end` is explicit only.
4. Effects are explicit: computations are values via `compute ... end`, run via `perform`.
5. Multiline constructs must end with `end` (`function`, `compute`, `bind`, `match`, `data`, `typeclass`, `instance`, `module`, `open`, `pack`, `unpack`).
6. Data: `define ... as data ... in TypeN ... end` with constructors `Type::Ctor`; match uses `case Type::Ctor`.
7. No implicit coercions; use `of-type`, `lift`, `up`, `down`, `pack`, `unpack` as needed.
8. Use `ignored` instead of `_` for unused binders.
9. List literals are canonical: `[]` and `[a, b]` (commas required). Empty lists require `of-type [] (List A)` when no expected list type is in scope.

## Test conventions

- Use `assert::assert-eq` with an explicit type argument.
- Run `smyth test` after changes.

## Templates

Function:
```locque
# Assumes: import arithmetic as Ar
define transparent inc as
  function x Natural returns Natural value
    Ar::add x 1
  end
```

Data:
```locque
define transparent Option as data A Type0 in Type0
  case Option::none of-type Option A
  case Option::some of-type for-all x as A to Option A
end
```

