| name | locque-authoring |
| description | 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. |
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
- Prefer
.lq M-expr files; do not handwrite .lqs.
- Keep paths lowercase. Every
lib/** file must have a matching test/** file.
- Use
Module::name qualification; open Alias exposing ... end is explicit only.
- Effects are explicit: computations are values via
compute ... end, run via perform.
- Multiline constructs must end with
end (function, compute, bind, match, data, typeclass, instance, module, open, pack, unpack).
- Data:
define ... as data ... in TypeN ... end with constructors Type::Ctor; match uses case Type::Ctor.
- No implicit coercions; use
of-type, lift, up, down, pack, unpack as needed.
- Use
ignored instead of _ for unused binders.
- 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:
# Assumes: import arithmetic as Ar
define transparent inc as
function x Natural returns Natural value
Ar::add x 1
end
Data:
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