Foo(Bar, Baz)

(Foo
  Bar
  Baz)

( ( Foo
    Bar )
  Baz )

00000: LoadFn { code: 00002, fvars: 00001 }
00001:   Return
00002: LoadVar(00000)
00003: LoadVar(00001)
00004: LoadFn { code: 00000, fvars: 00000 }
00005: AppArgToFn
00006: LoadVar(00001)
00007: AppArgToFn
00008: AppArgToFn
00009:   Return
00010: PushString("Foo")
00011: PushString("Bar")
00012: AppFnToArg
00013: PushString("Baz")
00014: AppFnToArg
00015:   Return

Foo(Bar, Baz)

---

Foo(Bar, Baz(Qux))

(Foo
  Bar
  (Baz
    Qux))

( ( Foo
    Bar )
  ( Baz
    Qux ) )

00000: LoadFn { code: 00002, fvars: 00001 }
00001:   Return
00002: LoadVar(00000)
00003: LoadVar(00001)
00004: LoadFn { code: 00000, fvars: 00000 }
00005: AppArgToFn
00006: LoadVar(00001)
00007: AppArgToFn
00008: AppArgToFn
00009:   Return
00010: PushString("Foo")
00011: PushString("Bar")
00012: AppFnToArg
00013: PushString("Baz")
00014: PushString("Qux")
00015: AppFnToArg
00016: AppFnToArg
00017:   Return

Foo(Bar, Baz(Qux))

---

Foo()

(Foo)

( Foo
  [] )

00000: LoadFn { code: 00002, fvars: 00001 }
00001:   Return
00002: LoadVar(00000)
00003: LoadVar(00001)
00004: LoadFn { code: 00000, fvars: 00000 }
00005: AppArgToFn
00006: LoadVar(00001)
00007: AppArgToFn
00008: AppArgToFn
00009:   Return
00010: PushString("Foo")
00011: PushString("")
00012: AppFnToArg
00013:   Return

Foo()

---

Foo([], Bar)

(Foo
  []
  Bar)

( ( Foo
    [] )
  Bar )

00000: LoadFn { code: 00002, fvars: 00001 }
00001:   Return
00002: LoadVar(00000)
00003: LoadVar(00001)
00004: LoadFn { code: 00000, fvars: 00000 }
00005: AppArgToFn
00006: LoadVar(00001)
00007: AppArgToFn
00008: AppArgToFn
00009:   Return
00010: PushString("Foo")
00011: PushString("")
00012: AppFnToArg
00013: PushString("Bar")
00014: AppFnToArg
00015:   Return

Foo([], Bar)

---

[A, B, C]

([]
  A
  B
  C)

( ( ( []
      A )
    B )
  C )

00000: LoadFn { code: 00002, fvars: 00001 }
00001:   Return
00002: LoadVar(00000)
00003: LoadVar(00001)
00004: LoadFn { code: 00000, fvars: 00000 }
00005: AppArgToFn
00006: LoadVar(00001)
00007: AppArgToFn
00008: AppArgToFn
00009:   Return
00010: PushString("")
00011: PushString("A")
00012: AppFnToArg
00013: PushString("B")
00014: AppFnToArg
00015: PushString("C")
00016: AppFnToArg
00017:   Return

[A, B, C]

---

[](A)(B)(C)

((([]
  A)
  B)
  C)

( ( ( []
      A )
    B )
  C )

00000: LoadFn { code: 00002, fvars: 00001 }
00001:   Return
00002: LoadVar(00000)
00003: LoadVar(00001)
00004: LoadFn { code: 00000, fvars: 00000 }
00005: AppArgToFn
00006: LoadVar(00001)
00007: AppArgToFn
00008: AppArgToFn
00009:   Return
00010: PushString("")
00011: PushString("A")
00012: AppFnToArg
00013: PushString("B")
00014: AppFnToArg
00015: PushString("C")
00016: AppFnToArg
00017:   Return

[A, B, C]

---

Foo bar: Baz

(Foo
  ([]
    ([]
      "bar"
      Baz)))

( Foo
  ( []
    ( ( []
        "bar" )
      Baz ) ) )

00000: LoadFn { code: 00002, fvars: 00001 }
00001:   Return
00002: LoadVar(00000)
00003: LoadVar(00001)
00004: LoadFn { code: 00000, fvars: 00000 }
00005: AppArgToFn
00006: LoadVar(00001)
00007: AppArgToFn
00008: AppArgToFn
00009:   Return
00010: PushString("Foo")
00011: PushString("")
00012: PushString("")
00013: PushString(""bar"")
00014: AppFnToArg
00015: PushString("Baz")
00016: AppFnToArg
00017: AppFnToArg
00018: AppFnToArg
00019:   Return

Foo([["bar", Baz]])