Claude-skill-registry AILANG Debug
Debug AILANG code errors. Use when you encounter type errors, parse errors, or runtime failures in AILANG programs.
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/ailang-debug" ~/.claude/skills/majiayu000-claude-skill-registry-ailang-debug && rm -rf "$T"
manifest:
skills/data/ailang-debug/SKILL.mdsource content
AILANG Debug
Fix common AILANG errors quickly.
Quick Reference
| Error | Cause | Fix |
|---|---|---|
| Not in entry module | Use entry module or |
| Wrong function name | Use not |
| Not imported | or write recursive |
| | Use |
| Missing semicolon | Add between statements |
| No loops in AILANG | Use recursion instead |
| No | Use |
Decision Tree
Error message? │ ├─ "undefined variable: X" │ └─ Is X a builtin? │ ├─ Yes → Import it: ailang builtins list | grep X │ └─ No → Check spelling, define it │ ├─ "expected }, got ..." │ └─ Missing semicolon between statements │ Fix: let x = 1; let y = 2; x + y │ ├─ "No instance for Num[string]" │ └─ Passing number to string function │ Fix: print(show(42)) not print(42) │ ├─ "unexpected token: for/while/in" │ └─ AILANG has no loops! │ Fix: Use recursion with match │ └─ Parse error with braces └─ Unmatched { } or missing expression Fix: Check all blocks are closed
Common Fixes
1. Missing Semicolons
-- WRONG export func main() -> () ! {IO} { let x = 10 let y = 20 print(show(x + y)) } -- CORRECT (semicolons between statements) export func main() -> () ! {IO} { let x = 10; let y = 20; print(show(x + y)) }
2. Print Needs String
-- WRONG: print expects string print(42) -- CORRECT: convert with show() print(show(42))
3. No Loops - Use Recursion
-- WRONG: no for loops for i in range(5) { print(show(i)) } -- CORRECT: recursive function export func printRange(n: int) -> () ! {IO} { if n <= 0 then () else { print(show(n)); printRange(n - 1) } }
4. Import Standard Library
-- WRONG: map not in scope let doubled = map(\x. x * 2, nums) -- CORRECT: import from std/list import std/list (map) let doubled = map(\x. x * 2, nums) -- OR: write it yourself (recursion) export func myMap[a,b](f: func(a) -> b, xs: [a]) -> [b] { match xs { [] => [], hd :: tl => f(hd) :: myMap(f, tl) } }
Debugging Workflow
-
Type-check first (faster feedback):
ailang check file.ail -
Read error location - line:column tells you where
-
Check the pattern above for your error type
-
Use REPL for quick tests:
ailang repl > show(42) > 1 + 2 > :type \x. x * 2 -
List builtins to find imports (CLI is source of truth):
# SOURCE OF TRUTH: Full documentation with examples ailang builtins list --verbose --by-module # Search for specific function with full docs ailang builtins list --verbose | grep -A 10 "map" # See a specific module's functions ailang builtins list --verbose --by-module | grep -A 30 "std/list"
Resources
Always prefer CLI commands (
ailang prompt, ailang builtins list --verbose) over static docs - they're always up-to-date.
See resources/error_catalog.md for additional error patterns.