ailang-debug

sunholo-data's avatarfrom sunholo-data

Debug AILANG code errors. Use when you encounter type errors, parse errors, or runtime failures in AILANG programs.

⭐1stars🔀0forks📁View on GitHub🕐Updated Dec 10, 2025

When & Why to Use This Skill

This Claude skill is a specialized debugging assistant for the AILANG programming language, designed to identify and resolve type errors, parse failures, and runtime issues. It provides developers with actionable solutions for common functional programming hurdles, such as managing strict typing, handling missing semicolons, and transitioning from imperative loops to recursive patterns.

Use Cases

  • Fixing 'undefined variable' errors by identifying missing standard library imports or correcting built-in function names.
  • Resolving type mismatch errors, such as using the 'show' function to convert integers or other types into strings for printing.
  • Refactoring prohibited imperative structures like 'for' or 'while' loops into valid AILANG recursive functions and match expressions.
  • Troubleshooting syntax errors related to AILANG's specific requirements, such as mandatory semicolons between statements in code blocks.
  • Optimizing development workflows by utilizing AILANG CLI tools for type-checking and exploring built-in module documentation.
nameAILANG Debug
descriptionDebug AILANG code errors. Use when you encounter type errors, parse errors, or runtime failures in AILANG programs.

AILANG Debug

Fix common AILANG errors quickly.

Quick Reference

Error Cause Fix
undefined variable: print Not in entry module Use entry module or import std/io (print)
undefined variable: println Wrong function name Use print not println
undefined variable: map Not imported import std/list (map) or write recursive
No instance for Num[string] print(42) Use print(show(42))
expected }, got let Missing semicolon Add ; between statements
unexpected token: for No loops in AILANG Use recursion instead
unexpected token: in No for x in xs Use match xs { ... }

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

  1. Type-check first (faster feedback):

    ailang check file.ail
    
  2. Read error location - line:column tells you where

  3. Check the pattern above for your error type

  4. Use REPL for quick tests:

    ailang repl
    > show(42)
    > 1 + 2
    > :type \x. x * 2
    
  5. 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.