Claude-skill-registry 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.

install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/locque-authoring" ~/.claude/skills/majiayu000-claude-skill-registry-locque-authoring && rm -rf "$T"
manifest: skills/data/locque-authoring/SKILL.md
source content

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:

# 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