try { [1,2,3][10] } catch e { errtype(e) }                                  => index, err=<nil>
try { [1,2,3][10] } catch e { e.Kind }                                      => index, err=<nil>
try { int("abc") } catch e { errtype(e) }                                   => conversion, err=<nil>
try { 1 + "a" } catch e { errtype(e) }                                      => type, err=<nil>
try { {}.missing.deep } catch e { errtype(e) }                              => nil, err=<nil>
try { throw("boom") } catch e { errtype(e) }                                => custom, err=<nil>
try { 1 % 0 } catch e { errtype(e) + ": " + e.Message }                     => custom: runtime error: integer divide by zero, err=<nil>
try { [1][5] } catch { retry }                                              => <nil>, err=retry limit exceeded: maximum of 3 retries reached (1:24)
 | try { [1][5] } catch { retry }
 | .......................^
try { throw("x") } catch { retry }                                          => <nil>, err=retry limit exceeded: maximum of 3 retries reached (1:28)
 | try { throw("x") } catch { retry }
 | ...........................^
try { throw("x") } catch e { errtype(e) == "custom" ? retry : 0 }           => <nil>, err=retry limit exceeded: maximum of 3 retries reached (1:55)
 | try { throw("x") } catch e { errtype(e) == "custom" ? retry : 0 }
 | ......................................................^
errtype(1)                                                                  => custom, err=<nil>
try { throw("a") } catch e1 { try { throw("b") } catch e2 { e1.Message + e2.Message } } => ab, err=<nil>
try { flaky() } catch e { retry }                                           => <nil>, err=retry limit exceeded: maximum of 3 retries reached (1:27)
 | try { flaky() } catch e { retry }
 | ..........................^
try { throw("boom") } catch e is "nope" { 1 } finally { 2 }                 => <nil>, err=boom (1:1)
 | try { throw("boom") } catch e is "nope" { 1 } finally { 2 }
 | ^
try { throw("original") } catch { "caught" } finally { throw("from-finally") } => <nil>, err=from-finally (1:56)
 | try { throw("original") } catch { "caught" } finally { throw("from-finally") }
 | .......................................................^
try { 1 } finally { throw("ff") }                                           => <nil>, err=ff (1:21)
 | try { 1 } finally { throw("ff") }
 | ....................^
try { filter([1,2,3], # > 1)[5] } catch e { errtype(e) }                    => index, err=<nil>
try { filter(1, true) } catch e { "ok" }                                    => ok, err=<nil>
try { retry } catch e { e.Message }                                         => retry used outside of a catch block, err=<nil>
throw()                                                                     => <nil>, err=invalid number of arguments (expected 1, got 0) (1:1)
 | throw()
 | ^
throw(1,2)                                                                  => <nil>, err=invalid number of arguments (expected 1, got 2) (1:1)
 | throw(1,2)
 | ^
errtype()                                                                   => <nil>, err=invalid number of arguments (expected 1, got 0) (1:1)
 | errtype()
 | ^
try(1)                                                                      => <nil>, err=try requires exactly two arguments (1:6)
 | try(1)
 | .....^
try(1,2,3)                                                                  => <nil>, err=try requires exactly two arguments (1:8)
 | try(1,2,3)
 | .......^
try()                                                                       => <nil>, err=try requires exactly two arguments (expected 2, got 0) (1:5)
 | try()
 | ....^
try { throw(42) } catch e { e.Message }                                     => 42, err=<nil>
try { throw([1,2]) } catch e { e.Message }                                  => [1 2], err=<nil>
try { throw(nil) } catch e { e.Message }                                    => <nil>, err=<nil>
