:x = Foo, :y = Bar, Pair(x, y)

(=
  :x
  Foo)
(=
  :y
  Bar)
(Pair
  x
  y)

( ( ( =>
        =>
          =>
            ( 0
              1 )
      "x" )
    Foo )
  =>
    ( ( ( =>
            =>
              =>
                ( 0
                  1 )
          "y" )
        Bar )
      =>
        ( ( Pair
            1 )
          0 ) ) )

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: LoadVar(00000)
00011: LoadVar(00001)
00012: AppFnToArg
00013:   Return
00014: LoadFn { code: 00010, fvars: 00001 }
00015:   Return
00016: LoadFn { code: 00014, fvars: 00000 }
00017:   Return
00018: LoadVar(00000)
00019: LoadVar(00001)
00020: AppFnToArg
00021:   Return
00022: LoadFn { code: 00018, fvars: 00001 }
00023:   Return
00024: LoadFn { code: 00022, fvars: 00000 }
00025:   Return
00026: PushString("Pair")
00027: LoadVar(00001)
00028: AppFnToArg
00029: LoadVar(00000)
00030: AppFnToArg
00031:   Return
00032: LoadFn { code: 00024, fvars: 00000 }
00033: PushString(""y"")
00034: AppFnToArg
00035: PushString("Bar")
00036: AppFnToArg
00037: LoadFn { code: 00026, fvars: 00001 }
00038: AppFnToArg
00039:   Return
00040: LoadFn { code: 00016, fvars: 00000 }
00041: PushString(""x"")
00042: AppFnToArg
00043: PushString("Foo")
00044: AppFnToArg
00045: LoadFn { code: 00032, fvars: 00000 }
00046: AppFnToArg
00047:   Return

Pair(Foo, Bar)

---

:f = (:x => { Foo(x) }), f(Bar)

(=
  :f
  (=>
    :x
    { (Foo
        x) }))
(f
  Bar)

( ( ( =>
        =>
          =>
            ( 0
              1 )
      "f" )
    ( ( =>
          =>
            0
        "x" )
      =>
        ( Foo
          0 ) ) )
  =>
    ( 0
      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: LoadVar(00000)
00011: LoadVar(00001)
00012: AppFnToArg
00013:   Return
00014: LoadFn { code: 00010, fvars: 00001 }
00015:   Return
00016: LoadFn { code: 00014, fvars: 00000 }
00017:   Return
00018: LoadVar(00000)
00019:   Return
00020: LoadFn { code: 00018, fvars: 00000 }
00021:   Return
00022: PushString("Foo")
00023: LoadVar(00000)
00024: AppFnToArg
00025:   Return
00026: LoadVar(00000)
00027: PushString("Bar")
00028: AppFnToArg
00029:   Return
00030: LoadFn { code: 00016, fvars: 00000 }
00031: PushString(""f"")
00032: AppFnToArg
00033: LoadFn { code: 00020, fvars: 00000 }
00034: PushString(""x"")
00035: AppFnToArg
00036: LoadFn { code: 00022, fvars: 00000 }
00037: AppFnToArg
00038: AppFnToArg
00039: LoadFn { code: 00026, fvars: 00000 }
00040: AppFnToArg
00041:   Return

Foo(Bar)