shelly-shell 0.5.0

A Rust based Unix style shell with a typed and structured language syntax.
check_repl ["id": "FUNCTION_TYPES", "name": "Function contracts and identity across submissions", "steps": [
    ["type F = fn(Integer): Integer; fn generic(\$args...): any { \$args[0] }; let \$f: F = `generic", "quiet", ""],
    ["echo (\$f 7)", "output", "7"],
    ["type F = fn(String): String; let \$new: F = `generic", "quiet", ""],
    ["echo (\$f 8) (\$new \"ok\")", "output", "8 ok"],
    ["\$f = \$new", "error", "Expected F, got F"],
    ["echo (\$f 9)", "output", "9"],
    ["fn generic(\$args...): any { \"changed\" }", "quiet", ""],
    ["echo (\$f 10)", "output", "10"],
    ["let \$bad: fn(Integer): Integer = `generic", "quiet", ""],
    ["\$bad 1", "error", "Return value: Expected Integer"],
    ["echo recovered", "output", "recovered"],
    ["let \$s = \" old \"; let \$method: fn(): String = `\$s.trim", "quiet", ""],
    ["\$s = \" new \"; echo (\$method)", "output", "new"],
    ["type F = fn(Missing): Integer", "error", "Unknown type"],
    ["let \$valid: F = `generic; echo (\$valid \"x\")", "output", "changed"],
    ["fn wrong(\$x: String): String { \$x }; let \$good: fn(Integer): Integer = `\$f", "error", "requires a bound function"],
    ["let \$items: [fn(Integer): Integer] = [`\$bad]", "quiet", ""],
    ["\$items[0] = `wrong", "error", "parameter 1 is incompatible"],
    ["\$items[0] 1", "error", "Return value: Expected Integer"],
    ["fn Integer::bump(\$delta: Integer): Integer { \$self = \$self + \$delta; \$self }; let \$n = 2; let \$bump: fn(Integer): Integer = `\$n.bump", "quiet", ""],
    ["echo (\$bump 3) \$n", "output", "5 5"],
], "exit": 0]