**** New globals: {A:i8*, B:i8?*, QRE:{X:i4, Y:i2}?*, R:{S:{X:i4}*, X:i4, Y:i2}*, RE:{X:i4, Y:i2}*, SA:i8**, SS:s*, SV:v*, T:{A:s, B:i8}*, X:i4, b:b, ims:U<Image>*, qtups:(i8, s, b)?*, tups:(i8, s, b)*}

> Distinct(A)
Distinct(A) : i8*
Binder : Distinct(A)
###
> Distinct([key] A) // Error.
Distinct([key] A) : i8*
*** Error: (9,14) Node: [key] A, Tok: '[key]', Message: Unexpected directive
Binder : Distinct(A)
###
> Distinct(tups)
Distinct(tups) : (i8, s, b)*
Binder : Distinct(tups)
###
> Distinct(qtups)
Distinct(qtups) : (i8, s, b)?*
Binder : Distinct(qtups)
###
> Distinct(SV)
Distinct(SV) : v*
*** Error: (9,11) Node: SV, Message: Equality comparison is not supported for items of type 'v'
Binder : Distinct*(SV)
###
> Distinct(R) // Error.
Distinct(R) : {S:{X:i4}*, X:i4, Y:i2}*
*** Error: (9,10) Node: R, Message: Equality comparison is not supported for items of type '{S:{X:i4}*, X:i4, Y:i2}'
Binder : Distinct*(R)
###
> Distinct(R, X)
Distinct(R, X) : {S:{X:i4}*, X:i4, Y:i2}*
Binder : Distinct(*1: R, *1.X)
###
> Distinct(R, [key] X)
Distinct(R, [key] X) : {S:{X:i4}*, X:i4, Y:i2}*
Binder : Distinct(*1: R, [key] *1.X)
###
> Distinct([key] R, X) // Error.
Distinct([key] R, X) : {S:{X:i4}*, X:i4, Y:i2}*
*** Error: (9,14) Node: [key] R, Tok: '[key]', Message: Unexpected directive
Binder : Distinct(*1: R, *1.X)
###
> Distinct(R, S) // Error.
Distinct(R, S) : {S:{X:i4}*, X:i4, Y:i2}*
*** Error: (12,13) Node: S, Message: Equality comparison is not supported for items of type '{X:i4}*'
Binder : Distinct*(*1: R, *1.S)
###
> Distinct(RE)
Distinct(RE) : {X:i4, Y:i2}*
Binder : Distinct(RE)
###
> Distinct(RE, Y)
Distinct(RE, Y) : {X:i4, Y:i2}*
Binder : Distinct(*1: RE, *1.Y)
###
> Distinct(QRE)
Distinct(QRE) : {X:i4, Y:i2}?*
Binder : Distinct(QRE)
###
> Distinct(QRE, X)
Distinct(QRE, X) : {X:i4, Y:i2}?*
Binder : Distinct(*1: QRE, Guard(?2: *1, ?2.X))
###
> Distinct(SA) // Error.
Distinct(SA) : i8**
*** Error: (9,11) Node: SA, Message: Equality comparison is not supported for items of type 'i8*'
Binder : Distinct*(SA)
###
> Distinct(SA, Sum(it))
Distinct(SA, Sum(it)) : i8**
Binder : Distinct(*1: SA, Sum(*1))
###
> Distinct(ims)
Distinct(ims) : U<Image>*
Binder : Distinct(ims)
###
> Distinct([=] A)
Distinct([=] A) : i8*
Binder : Distinct([=] A)
###
> Distinct([~] A) // Warning.
Corrected by binder: [Distinct([=] A) // Warning.]
Distinct([~] A) : i8*
*** Warning: (9,12) Node: [~] A, Tok: '[~]', Message: Case insensitive comparison doesn't apply to type 'i8'
Binder : Distinct([~] A)
###
> Distinct([~=] A) // Warning.
Corrected by binder: [Distinct([=] A) // Warning.]
Distinct([~=] A) : i8*
*** Warning: (9,13) Node: [~=] A, Tok: '[~=]', Message: Case insensitive comparison doesn't apply to type 'i8'
Binder : Distinct([~=] A)
###
> Distinct([~] SS)
Distinct([~] SS) : s*
Binder : Distinct([~] SS)
###
> Distinct([~=] SS)
Distinct([~=] SS) : s*
Binder : Distinct([~=] SS)
###
> Distinct([key] SS) // Error.
Distinct([key] SS) : s*
*** Error: (9,14) Node: [key] SS, Tok: '[key]', Message: Unexpected directive
Binder : Distinct(SS)
###
> Distinct([~] T)
Distinct([~] T) : {A:s, B:i8}*
Binder : Distinct([~] T)
###
> Distinct([~=] T)
Distinct([~=] T) : {A:s, B:i8}*
Binder : Distinct([~=] T)
###
> Distinct(T, [=] A)
Distinct(T, [=] A) : {A:s, B:i8}*
Binder : Distinct(*1: T, [=] *1.A)
###
> Distinct(T, [~] A)
Distinct(T, [~] A) : {A:s, B:i8}*
Binder : Distinct(*1: T, [~] *1.A)
###
> Distinct(T, [~=] A)
Distinct(T, [~=] A) : {A:s, B:i8}*
Binder : Distinct(*1: T, [~=] *1.A)
###
> Distinct([~] T, [key] A) // Error.
Distinct([~] T, [key] A) : {A:s, B:i8}*
*** Error: (9,12) Node: [~] T, Tok: '[~]', Message: Unexpected directive
Binder : Distinct(*1: T, [key] *1.A)
###
> Distinct([<] SS) // Error.
Distinct([<] SS) : s*
*** Error: (9,12) Node: [<] SS, Tok: '[<]', Message: Unexpected directive
Binder : Distinct(SS)
###
> Filter(R, X > 100)
Filter(R, X $> 100) : {S:{X:i4}*, X:i4, Y:i2}*
Binder : TakeIf*(*1: R, Num<i8>(*1.X) @> 100)
Reducer: Take(*1: R, [if] Num<i8>(*1.X) @> 100)
###
> Filter(r : R, [if] r.X > 100)
Filter(r : R, [if] r.X $> 100) : {S:{X:i4}*, X:i4, Y:i2}*
Binder : TakeIf*(*1: R, [if] Num<i8>(*1.X) @> 100)
Reducer: Take(*1: R, [if] Num<i8>(*1.X) @> 100)
###
> Filter(QRE, X > 100)
Filter(QRE, X $> 100) : {X:i4, Y:i2}?*
Binder : TakeIf*(*1: QRE, Guard(?3: Guard(?2: *1, ?2.X), Num<i8>(?3)) $> 100)
Reducer: Take(*1: QRE, [if] Guard(?2: *1, Num<i8>(?2.X)) $> 100)
###
> Filter(R, X > Y)
Filter(R, X $> Y) : {S:{X:i4}*, X:i4, Y:i2}*
Binder : TakeIf*(*1: R, *1.X @> Num<i4>(*1.Y))
Reducer: Take(*1: R, [if] *1.X @> Num<i4>(*1.Y))
###
> Filter(r : R, r.X > r.Y)
Filter(r : R, r.X $> r.Y) : {S:{X:i4}*, X:i4, Y:i2}*
Binder : TakeIf*(*1: R, *1.X @> Num<i4>(*1.Y))
Reducer: Take(*1: R, [if] *1.X @> Num<i4>(*1.Y))
###
> Filter(ims, Path.Len > 10)
Filter(ims, Path.Len $> 10) : U<Image>*
Binder : TakeIf*(*1: ims, Text.Len(Link.Path(*1)) @> 10)
Reducer: Take(*1: ims, [if] Text.Len(Link.Path(*1)) @> 10)
###
> Map(R, Filter(S, X > 100))
Map(R, Filter(S, X $> 100)) : {X:i4}**
Binder : ForEach(*1: R, TakeIf*(*2: *1.S, Num<i8>(*2.X) @> 100))
Reducer: ForEach(*1: R, Take(*2: *1.S, [if] Num<i8>(*2.X) @> 100))
###
> Map(r : R, Filter(s : S, s.X > 100))
Map(r : R, Filter(s : S, s.X $> 100)) : {X:i4}**
Binder : ForEach(*1: R, TakeIf*(*2: *1.S, Num<i8>(*2.X) @> 100))
Reducer: ForEach(*1: R, Take(*2: *1.S, [if] Num<i8>(*2.X) @> 100))
###
> Map(r : R, Filter(S, X > r.X)) // REVIEW: No way without cursor over R.
Map(r : R, Filter(S, X $> r.X)) : {X:i4}**
Binder : ForEach(*1: R, TakeIf*(*2: *1.S, *2.X @> *1.X))
Reducer: ForEach(*1: R, Take(*2: *1.S, [if] *2.X @> *1.X))
###
> Map(r : R, Filter(s : S, s.X > r.X))
Map(r : R, Filter(s : S, s.X $> r.X)) : {X:i4}**
Binder : ForEach(*1: R, TakeIf*(*2: *1.S, *2.X @> *1.X))
Reducer: ForEach(*1: R, Take(*2: *1.S, [if] *2.X @> *1.X))
###
> TakeOne([])
TakeOne([]) : v
Binder : TakeOne(null)
Reducer: dflt<v>
###
> First  ([])
First([]) : o
Binder : First*(null)
Reducer: null
###
> TakeOne([], [else] null)
TakeOne([], [else] null) : o
Binder : TakeOne(null, [else] null)
Reducer: null
###
> First  ([], [else] null)
First([], [else] null) : o
Binder : First*(null, [else] null)
Reducer: null
###
> TakeOne(Range(0))
TakeOne(Range(0)) : i8
Binder : TakeOne(Range(0))
Reducer: 0
###
> First  (Range(0))
First(Range(0)) : i8?
Binder : First*(Range(0))
Reducer: null
###
> TakeOne(Range(0), [else] null)
TakeOne(Range(0), [else] null) : i8?
Binder : TakeOne(Range(0), [else] null)
Reducer: null
###
> First  (Range(0), [else] null)
First(Range(0), [else] null) : i8?
Binder : First*(Range(0), [else] null)
Reducer: null
###
> TakeOne(Range(0), [else] -1)
TakeOne(Range(0), [else] -1) : i8
Binder : TakeOne(Range(0), [else] -1)
Reducer: -1
###
> First  (Range(0), [else] -1)
First(Range(0), [else] -1) : i8
Binder : First*(Range(0), [else] -1)
Reducer: -1
###
> TakeOne(Range(4, 7))
TakeOne(Range(4, 7)) : i8
Binder : TakeOne(Range(4, 7))
###
> First  (Range(4, 7))
First(Range(4, 7)) : i8?
Binder : First*(Range(4, 7))
Reducer: TakeOne(Range(4, 7), [else] null)
###
> TakeOne(Range(4, 7), [else] null)
TakeOne(Range(4, 7), [else] null) : i8?
Binder : TakeOne(Range(4, 7), [else] null)
###
> First  (Range(4, 7), [else] null)
First(Range(4, 7), [else] null) : i8?
Binder : First*(Range(4, 7), [else] null)
Reducer: TakeOne(Range(4, 7), [else] null)
###
> TakeOne([4, 5, 6])
TakeOne([4, 5, 6]) : i8
Binder : TakeOne([4, 5, 6])
Reducer: 4
###
> First  ([4, 5, 6])
First([4, 5, 6]) : i8?
Binder : First*([4, 5, 6])
Reducer: Opt<i8?>(4)
###
> TakeOne([4, 5, 6], [else] null)
TakeOne([4, 5, 6], [else] null) : i8?
Binder : TakeOne([4, 5, 6], [else] null)
Reducer: Opt<i8?>(4)
###
> First  ([4, 5, 6], [else] null)
First([4, 5, 6], [else] null) : i8?
Binder : First*([4, 5, 6], [else] null)
Reducer: Opt<i8?>(4)
###
> TakeOne([], b)
TakeOne([], b) : v
Binder : TakeOne(*1: null, b)
Reducer: dflt<v>
###
> First  ([], b)
First([], b) : o
Binder : First*(*1: null, b)
Reducer: null
###
> TakeOne(A)
TakeOne(A) : i8
Binder : TakeOne(A)
###
> First  (A)
First(A) : i8?
Binder : First*(A)
Reducer: TakeOne(A, [else] null)
###
> TakeOne(A, [if] true)
TakeOne(A, [if] true) : i8
Binder : TakeOne(*1: A, [if] true)
Reducer: TakeOne(A)
###
> First  (A, [if] true)
First(A, [if] true) : i8?
Binder : First*(*1: A, [if] true)
Reducer: TakeOne(A, [else] null)
###
> TakeOne(A, [if] false)
TakeOne(A, [if] false) : i8
Binder : TakeOne(*1: A, [if] false)
Reducer: 0
###
> First  (A, [if] false)
First(A, [if] false) : i8?
Binder : First*(*1: A, [if] false)
Reducer: null
###
> TakeOne(A, [else] 0)
TakeOne(A, [else] 0) : i8
Binder : TakeOne(A, [else] 0)
###
> First  (A, [else] 0)
First(A, [else] 0) : i8
Binder : First*(A, [else] 0)
Reducer: TakeOne(A, [else] 0)
###
> TakeOne(A, [else] -1)
TakeOne(A, [else] -1) : i8
Binder : TakeOne(A, [else] -1)
###
> First  (A, [else] -1)
First(A, [else] -1) : i8
Binder : First*(A, [else] -1)
Reducer: TakeOne(A, [else] -1)
###
> TakeOne(A, [else] null)
TakeOne(A, [else] null) : i8?
Binder : TakeOne(A, [else] null)
###
> First  (A, [else] null)
First(A, [else] null) : i8?
Binder : First*(A, [else] null)
Reducer: TakeOne(A, [else] null)
###
> TakeOne(A, [if] true, [else] 0)
TakeOne(A, [if] true, [else] 0) : i8
Binder : TakeOne(*1: A, [if] true, [else] 0)
Reducer: TakeOne(A, [else] 0)
###
> First  (A, [if] true, [else] 0)
First(A, [if] true, [else] 0) : i8
Binder : First*(*1: A, [if] true, [else] 0)
Reducer: TakeOne(A, [else] 0)
###
> TakeOne(A, [if] true, [else] -1)
TakeOne(A, [if] true, [else] -1) : i8
Binder : TakeOne(*1: A, [if] true, [else] -1)
Reducer: TakeOne(A, [else] -1)
###
> First  (A, [if] true, [else] -1)
First(A, [if] true, [else] -1) : i8
Binder : First*(*1: A, [if] true, [else] -1)
Reducer: TakeOne(A, [else] -1)
###
> TakeOne(A, true, -1)
TakeOne(A, true, -1) : i8
Binder : TakeOne(*1: A, true, -1)
Reducer: TakeOne(A, [else] -1)
###
> First  (A, true, -1)
First(A, true, -1) : i8
Binder : First*(*1: A, true, -1)
Reducer: TakeOne(A, [else] -1)
###
> TakeOne(A, true, null)
TakeOne(A, true, null) : i8?
Binder : TakeOne(*1: A, true, null)
Reducer: TakeOne(A, [else] null)
###
> First  (A, true, null)
First(A, true, null) : i8?
Binder : First*(*1: A, true, null)
Reducer: TakeOne(A, [else] null)
###
> TakeOne(A, [if] false, [else] 0)
TakeOne(A, [if] false, [else] 0) : i8
Binder : TakeOne(*1: A, [if] false, [else] 0)
Reducer: 0
###
> First  (A, [if] false, [else] 0)
First(A, [if] false, [else] 0) : i8
Binder : First*(*1: A, [if] false, [else] 0)
Reducer: 0
###
> TakeOne(A, [if] true, [else] null)
TakeOne(A, [if] true, [else] null) : i8?
Binder : TakeOne(*1: A, [if] true, [else] null)
Reducer: TakeOne(A, [else] null)
###
> First  (A, [if] true, [else] null)
First(A, [if] true, [else] null) : i8?
Binder : First*(*1: A, [if] true, [else] null)
Reducer: TakeOne(A, [else] null)
###
> TakeOne(A, [if] false, [else] null)
TakeOne(A, [if] false, [else] null) : i8?
Binder : TakeOne(*1: A, [if] false, [else] null)
Reducer: null
###
> First  (A, [if] false, [else] null)
First(A, [if] false, [else] null) : i8?
Binder : First*(*1: A, [if] false, [else] null)
Reducer: null
###
> TakeOne(R)
TakeOne(R) : {S:{X:i4}*, X:i4, Y:i2}
Binder : TakeOne(R)
###
> First  (R)
First(R) : {S:{X:i4}*, X:i4, Y:i2}?
Binder : First*(R)
Reducer: TakeOne(R, [else] null)
###
> TakeOne(R.S)
TakeOne(R.S) : {X:i4}*
Binder : TakeOne(ForEach(*1: R, *1.S))
###
> First  (R.S)
First(R.S) : {X:i4}*
Binder : First*(ForEach(*1: R, *1.S))
Reducer: TakeOne(ForEach(*1: R, *1.S))
###
> TakeOne(R, [if] true)
TakeOne(R, [if] true) : {S:{X:i4}*, X:i4, Y:i2}
Binder : TakeOne(*1: R, [if] true)
Reducer: TakeOne(R)
###
> First  (R, [if] true)
First(R, [if] true) : {S:{X:i4}*, X:i4, Y:i2}?
Binder : First*(*1: R, [if] true)
Reducer: TakeOne(R, [else] null)
###
> TakeOne(R.S, [if] true)
TakeOne(R.S, [if] true) : {X:i4}*
Binder : TakeOne(*2: ForEach(*1: R, *1.S), [if] true)
Reducer: TakeOne(ForEach(*1: R, *1.S))
###
> First  (R.S, [if] true)
First(R.S, [if] true) : {X:i4}*
Binder : First*(*2: ForEach(*1: R, *1.S), [if] true)
Reducer: TakeOne(ForEach(*1: R, *1.S))
###
> TakeOne(R, [if] false)
TakeOne(R, [if] false) : {S:{X:i4}*, X:i4, Y:i2}
Binder : TakeOne(*1: R, [if] false)
Reducer: dflt<{S:{X:i4}*, X:i4, Y:i2}>
###
> First  (R, [if] false)
First(R, [if] false) : {S:{X:i4}*, X:i4, Y:i2}?
Binder : First*(*1: R, [if] false)
Reducer: null
###
> TakeOne(R.S, [if] false)
TakeOne(R.S, [if] false) : {X:i4}*
Binder : TakeOne(*2: ForEach(*1: R, *1.S), [if] false)
Reducer: null
###
> First  (R.S, [if] false)
First(R.S, [if] false) : {X:i4}*
Binder : First*(*2: ForEach(*1: R, *1.S), [if] false)
Reducer: null
###
> TakeOne(R, [else] null)
TakeOne(R, [else] null) : {S:{X:i4}*, X:i4, Y:i2}?
Binder : TakeOne(R, [else] null)
###
> First  (R, [else] null)
First(R, [else] null) : {S:{X:i4}*, X:i4, Y:i2}?
Binder : First*(R, [else] null)
Reducer: TakeOne(R, [else] null)
###
> TakeOne(R.S, [else] null)
TakeOne(R.S, [else] null) : {X:i4}*
Binder : TakeOne(ForEach(*1: R, *1.S), [else] null)
###
> First  (R.S, [else] null)
First(R.S, [else] null) : {X:i4}*
Binder : First*(ForEach(*1: R, *1.S), [else] null)
Reducer: TakeOne(ForEach(*1: R, *1.S), [else] null)
###
> TakeOne(R, true, null)
TakeOne(R, true, null) : {S:{X:i4}*, X:i4, Y:i2}?
Binder : TakeOne(*1: R, true, null)
Reducer: TakeOne(R, [else] null)
###
> First  (R, true, null)
First(R, true, null) : {S:{X:i4}*, X:i4, Y:i2}?
Binder : First*(*1: R, true, null)
Reducer: TakeOne(R, [else] null)
###
> TakeOne(R.S, true, null)
TakeOne(R.S, true, null) : {X:i4}*
Binder : TakeOne(*2: ForEach(*1: R, *1.S), true, null)
Reducer: TakeOne(ForEach(*1: R, *1.S), [else] null)
###
> First  (R.S, true, null)
First(R.S, true, null) : {X:i4}*
Binder : First*(*2: ForEach(*1: R, *1.S), true, null)
Reducer: TakeOne(ForEach(*1: R, *1.S), [else] null)
###
> TakeOne(R, [if] true, [else] null)
TakeOne(R, [if] true, [else] null) : {S:{X:i4}*, X:i4, Y:i2}?
Binder : TakeOne(*1: R, [if] true, [else] null)
Reducer: TakeOne(R, [else] null)
###
> First  (R, [if] true, [else] null)
First(R, [if] true, [else] null) : {S:{X:i4}*, X:i4, Y:i2}?
Binder : First*(*1: R, [if] true, [else] null)
Reducer: TakeOne(R, [else] null)
###
> TakeOne(R.S, [if] true, [else] null)
TakeOne(R.S, [if] true, [else] null) : {X:i4}*
Binder : TakeOne(*2: ForEach(*1: R, *1.S), [if] true, [else] null)
Reducer: TakeOne(ForEach(*1: R, *1.S), [else] null)
###
> First  (R.S, [if] true, [else] null)
First(R.S, [if] true, [else] null) : {X:i4}*
Binder : First*(*2: ForEach(*1: R, *1.S), [if] true, [else] null)
Reducer: TakeOne(ForEach(*1: R, *1.S), [else] null)
###
> TakeOne(R, [if] false, [else] null)
TakeOne(R, [if] false, [else] null) : {S:{X:i4}*, X:i4, Y:i2}?
Binder : TakeOne(*1: R, [if] false, [else] null)
Reducer: null
###
> First  (R, [if] false, [else] null)
First(R, [if] false, [else] null) : {S:{X:i4}*, X:i4, Y:i2}?
Binder : First*(*1: R, [if] false, [else] null)
Reducer: null
###
> TakeOne(R.S, [if] false, [else] null)
TakeOne(R.S, [if] false, [else] null) : {X:i4}*
Binder : TakeOne(*2: ForEach(*1: R, *1.S), [if] false, [else] null)
Reducer: null
###
> First  (R.S, [if] false, [else] null)
First(R.S, [if] false, [else] null) : {X:i4}*
Binder : First*(*2: ForEach(*1: R, *1.S), [if] false, [else] null)
Reducer: null
###
> DropOne(A)
DropOne(A) : i8*
Binder : DropOne*(A)
Reducer: Drop(A, 1)
###
> TakeOne(a : A, [if] a > 100)
TakeOne(a : A, [if] a $> 100) : i8
Binder : TakeOne(*1: A, [if] *1 @> 100)
Reducer: TakeOne(*1: A, *1 @> 100)
###
> First  (a : A, [if] a > 100)
First(a : A, [if] a $> 100) : i8?
Binder : First*(*1: A, [if] *1 @> 100)
Reducer: TakeOne(*1: A, *1 @> 100, null)
###
> TakeOne(a : A, a > 100, [else] 0)
TakeOne(a : A, a $> 100, [else] 0) : i8
Binder : TakeOne(*1: A, *1 @> 100, [else] 0)
Reducer: TakeOne(*1: A, *1 @> 100, 0)
###
> First  (a : A, a > 100, [else] 0)
First(a : A, a $> 100, [else] 0) : i8
Binder : First*(*1: A, *1 @> 100, [else] 0)
Reducer: TakeOne(*1: A, *1 @> 100, 0)
###
> TakeOne(a : A, a > 100, null)
TakeOne(a : A, a $> 100, null) : i8?
Binder : TakeOne(*1: A, *1 @> 100, null)
###
> First  (a : A, a > 100, null)
First(a : A, a $> 100, null) : i8?
Binder : First*(*1: A, *1 @> 100, null)
Reducer: TakeOne(*1: A, *1 @> 100, null)
###
> DropOne(a : A, a > 100)
DropOne(a : A, a $> 100) : i8*
Binder : DropOne*(*1: A, *1 @> 100)
Reducer: Drop(*1: A, 1, *1 @> 100)
###
> DropOne(a : A, [if] a > 100)
DropOne(a : A, [if] a $> 100) : i8*
Binder : DropOne*(*1: A, [if] *1 @> 100)
Reducer: Drop(*1: A, 1, [if] *1 @> 100)
###
> TakeOne(a : A, [while] a > 100) // Error.
TakeOne(a : A, [while] a $> 100) : i8
*** Error: (15,22) Node: [while] a $> 100, Tok: '[while]', Message: Unexpected directive
Binder : TakeOne(*1: A, *1 @> 100)
###
> First  (a : A, [while] a > 100) // Error.
First(a : A, [while] a $> 100) : i8?
*** Error: (15,22) Node: [while] a $> 100, Tok: '[while]', Message: Unexpected directive
Binder : First*(*1: A, *1 @> 100)
Reducer: TakeOne(*1: A, *1 @> 100, null)
###
> DropOne(a : A, [while] a > 100) // Error.
DropOne(a : A, [while] a $> 100) : i8*
*** Error: (15,22) Node: [while] a $> 100, Tok: '[while]', Message: Unexpected directive
Binder : DropOne*(*1: A, *1 @> 100)
Reducer: Drop(*1: A, 1, *1 @> 100)
###
> TakeOne([if] a : A, a > 100) // Error.
TakeOne([if] a : A, a $> 100) : i8
*** Error: (8,12) Node: [if] a : A, Tok: '[if]', Message: Unexpected directive
Binder : TakeOne(*1: A, *1 @> 100)
###
> First  ([if] a : A, a > 100) // Error.
First([if] a : A, a $> 100) : i8?
*** Error: (8,12) Node: [if] a : A, Tok: '[if]', Message: Unexpected directive
Binder : First*(*1: A, *1 @> 100)
Reducer: TakeOne(*1: A, *1 @> 100, null)
###
> DropOne([if] a : A, a > 100) // Error.
DropOne([if] a : A, a $> 100) : i8*
*** Error: (8,12) Node: [if] a : A, Tok: '[if]', Message: Unexpected directive
Binder : DropOne*(*1: A, *1 @> 100)
Reducer: Drop(*1: A, 1, *1 @> 100)
###
> TakeOne(a : A, [else] -1, [if] a > 100) // Error.
Corrected by binder: [TakeOne(a : A, [else] -1, [if] A > 100) // Error.]
TakeOne(a : A, [else] -1, [if] a $> 100) : i8?
*** Error: (15,21) Node: [else] -1, Tok: '[else]', Message: Unexpected directive
*** Error: (31,32) Node: a, Message: Name does not exist in the current context, did you intend 'A'?
*** Error: (26,30) Node: [if] a $> 100, Tok: '[if]', Message: Unexpected directive
*** Error: (22,23) Node: -1, Message: Invalid operand type: cannot convert type 'i8' to 'b'
*** Error: (33,34) Node: a $> 100, Message: Invalid operand type: cannot convert type 'b*' to 'i8?'
Binder : TakeOne(*1: A, Error(ErrBadType_Src_Dst), Error(ErrBadType_Src_Dst))
###
> First  (a : A, [else] -1, [if] a > 100) // Error.
Corrected by binder: [First  (a : A, [else] -1, [if] A > 100) // Error.]
First(a : A, [else] -1, [if] a $> 100) : i8?
*** Error: (15,21) Node: [else] -1, Tok: '[else]', Message: Unexpected directive
*** Error: (31,32) Node: a, Message: Name does not exist in the current context, did you intend 'A'?
*** Error: (26,30) Node: [if] a $> 100, Tok: '[if]', Message: Unexpected directive
*** Error: (22,23) Node: -1, Message: Invalid operand type: cannot convert type 'i8' to 'b'
*** Error: (33,34) Node: a $> 100, Message: Invalid operand type: cannot convert type 'b*' to 'i8?'
Binder : First*(*1: A, Error(ErrBadType_Src_Dst), Error(ErrBadType_Src_Dst))
Reducer: TakeOne(*1: A, Error(ErrBadType_Src_Dst), Error(ErrBadType_Src_Dst))
###
> TakeOne(B)
TakeOne(B) : i8?
Binder : TakeOne(B)
###
> First  (B)
First(B) : i8?
Binder : First*(B)
Reducer: TakeOne(B)
###
> TakeOne(b : B, b > 100)
TakeOne(b : B, b $> 100) : i8?
Binder : TakeOne(*1: B, *1 $> 100)
###
> First  (b : B, [if] b > 100)
First(b : B, [if] b $> 100) : i8?
Binder : First*(*1: B, [if] *1 $> 100)
Reducer: TakeOne(*1: B, *1 $> 100)
###
> TakeOne(R)
TakeOne(R) : {S:{X:i4}*, X:i4, Y:i2}
Binder : TakeOne(R)
###
> First  (R)
First(R) : {S:{X:i4}*, X:i4, Y:i2}?
Binder : First*(R)
Reducer: TakeOne(R, [else] null)
###
> TakeOne(R, [else] null)
TakeOne(R, [else] null) : {S:{X:i4}*, X:i4, Y:i2}?
Binder : TakeOne(R, [else] null)
###
> First  (R, [else] null)
First(R, [else] null) : {S:{X:i4}*, X:i4, Y:i2}?
Binder : First*(R, [else] null)
Reducer: TakeOne(R, [else] null)
###
> TakeOne(R, [if] X > Y)
TakeOne(R, [if] X $> Y) : {S:{X:i4}*, X:i4, Y:i2}
Binder : TakeOne(*1: R, [if] *1.X @> Num<i4>(*1.Y))
Reducer: TakeOne(*1: R, *1.X @> Num<i4>(*1.Y))
###
> First  (R, [if] X > Y)
First(R, [if] X $> Y) : {S:{X:i4}*, X:i4, Y:i2}?
Binder : First*(*1: R, [if] *1.X @> Num<i4>(*1.Y))
Reducer: TakeOne(*1: R, *1.X @> Num<i4>(*1.Y), null)
###
> TakeOne(r : R, r.X > r.Y)
TakeOne(r : R, r.X $> r.Y) : {S:{X:i4}*, X:i4, Y:i2}
Binder : TakeOne(*1: R, *1.X @> Num<i4>(*1.Y))
###
> First  (r : R, r.X > r.Y)
First(r : R, r.X $> r.Y) : {S:{X:i4}*, X:i4, Y:i2}?
Binder : First*(*1: R, *1.X @> Num<i4>(*1.Y))
Reducer: TakeOne(*1: R, *1.X @> Num<i4>(*1.Y), null)
###
> TakeOne(Filter(R, X > Y)) // REVIEW: Optimize to just TakeOne(R, X > Y).
TakeOne(Filter(R, X $> Y)) : {S:{X:i4}*, X:i4, Y:i2}
Binder : TakeOne(TakeIf*(*1: R, *1.X @> Num<i4>(*1.Y)))
Reducer: TakeOne(Take(*1: R, [if] *1.X @> Num<i4>(*1.Y)))
###
> First  (Filter(R, X > Y)) // REVIEW: Optimize to just First  (R, X > Y).
First(Filter(R, X $> Y)) : {S:{X:i4}*, X:i4, Y:i2}?
Binder : First*(TakeIf*(*1: R, *1.X @> Num<i4>(*1.Y)))
Reducer: TakeOne(Take(*1: R, [if] *1.X @> Num<i4>(*1.Y)), [else] null)
###
> TakeOne(Filter(R, X > Y), [else] null) // REVIEW: Optimize to just TakeOne(R, X > Y, null).
TakeOne(Filter(R, X $> Y), [else] null) : {S:{X:i4}*, X:i4, Y:i2}?
Binder : TakeOne(TakeIf*(*1: R, *1.X @> Num<i4>(*1.Y)), [else] null)
Reducer: TakeOne(Take(*1: R, [if] *1.X @> Num<i4>(*1.Y)), [else] null)
###
> First  (Filter(R, X > Y), [else] null) // REVIEW: Optimize to just First  (R, X > Y, null).
First(Filter(R, X $> Y), [else] null) : {S:{X:i4}*, X:i4, Y:i2}?
Binder : First*(TakeIf*(*1: R, *1.X @> Num<i4>(*1.Y)), [else] null)
Reducer: TakeOne(Take(*1: R, [if] *1.X @> Num<i4>(*1.Y)), [else] null)
###
> TakeOne(Filter(r : R, r.X > r.Y))
TakeOne(Filter(r : R, r.X $> r.Y)) : {S:{X:i4}*, X:i4, Y:i2}
Binder : TakeOne(TakeIf*(*1: R, *1.X @> Num<i4>(*1.Y)))
Reducer: TakeOne(Take(*1: R, [if] *1.X @> Num<i4>(*1.Y)))
###
> First  (Filter(r : R, r.X > r.Y))
First(Filter(r : R, r.X $> r.Y)) : {S:{X:i4}*, X:i4, Y:i2}?
Binder : First*(TakeIf*(*1: R, *1.X @> Num<i4>(*1.Y)))
Reducer: TakeOne(Take(*1: R, [if] *1.X @> Num<i4>(*1.Y)), [else] null)
###
> TakeOne(SV)
TakeOne(SV) : v
Binder : TakeOne(SV)
###
> First  (SV)
First(SV) : o
Binder : First*(SV)
Reducer: TakeOne(SV, [else] null)
###
> TakeOne(Range(0))
TakeOne(Range(0)) : i8
Binder : TakeOne(Range(0))
Reducer: 0
###
> First  (Range(0))
First(Range(0)) : i8?
Binder : First*(Range(0))
Reducer: null
###
> TakeOne(null)
TakeOne(null) : o
Binder : TakeOne(null)
Reducer: null
###
> First  (null)
First(null) : o
Binder : First*(null)
Reducer: null
###
> TakeOne(["A", "B", "C"])
TakeOne(["A", "B", "C"]) : s
Binder : TakeOne(["A", "B", "C"])
Reducer: "A"
###
> First  (["A", "B", "C"])
First(["A", "B", "C"]) : s
Binder : First*(["A", "B", "C"])
Reducer: "A"
###
> TakeOne([], [else] -1) // Error.
TakeOne([], [else] -1) : v
*** Error: (19,20) Node: -1, Message: Invalid operand type: cannot convert type 'i8' to 'v'
Binder : TakeOne(null, [else] Error(ErrBadType_Src_Dst))
Reducer: Error(ErrBadType_Src_Dst)
###
> TakeOne([], [else] "hi") // Error.
TakeOne([], [else] "hi") : o
*** Error: (19,23) Node: "hi", Message: Invalid operand type: cannot convert type 's' to 'o'
Binder : TakeOne(null, [else] Error(ErrBadType_Src_Dst))
Reducer: Error(ErrBadType_Src_Dst)
###
> TakeOne([], [else] true) // Error.
TakeOne([], [else] true) : v
*** Error: (19,23) Node: true, Message: Invalid operand type: cannot convert type 'b' to 'v'
Binder : TakeOne(null, [else] Error(ErrBadType_Src_Dst))
Reducer: Error(ErrBadType_Src_Dst)
###
> TakeOne(A, [else] 3.5) // Error.
TakeOne(A, [else] 3.5) : i8
*** Error: (18,21) Node: 3.5, Message: Invalid operand type: cannot convert type 'r8' to 'i8'
Binder : TakeOne(A, [else] Error(ErrBadType_Src_Dst))
###
> TakeOne(A, [else] "hello") // Error.
TakeOne(A, [else] "hello") : i8?
*** Error: (18,25) Node: "hello", Message: Invalid operand type: cannot convert type 's' to 'i8?'
Binder : TakeOne(A, [else] Error(ErrBadType_Src_Dst))
###
> TakeOne(R, [else] 0) // Error.
TakeOne(R, [else] 0) : {S:{X:i4}*, X:i4, Y:i2}
*** Error: (18,19) Node: 0, Message: Invalid operand type: cannot convert type 'i8' to '{S:{X:i4}*, X:i4, Y:i2}'
Binder : TakeOne(R, [else] Error(ErrBadType_Src_Dst))
###
> TakeOne(R, [else] -1) // Error.
TakeOne(R, [else] -1) : {S:{X:i4}*, X:i4, Y:i2}
*** Error: (18,19) Node: -1, Message: Invalid operand type: cannot convert type 'i8' to '{S:{X:i4}*, X:i4, Y:i2}'
Binder : TakeOne(R, [else] Error(ErrBadType_Src_Dst))
###
> TakeOne(R, true, -1) // Error.
TakeOne(R, true, -1) : {S:{X:i4}*, X:i4, Y:i2}
*** Error: (17,18) Node: -1, Message: Invalid operand type: cannot convert type 'i8' to '{S:{X:i4}*, X:i4, Y:i2}'
Binder : TakeOne(*1: R, true, Error(ErrBadType_Src_Dst))
Reducer: TakeOne(R, [else] Error(ErrBadType_Src_Dst))
###
> TakeOne(R, [if] false, [else] 0) // Error.
TakeOne(R, [if] false, [else] 0) : {S:{X:i4}*, X:i4, Y:i2}
*** Error: (30,31) Node: 0, Message: Invalid operand type: cannot convert type 'i8' to '{S:{X:i4}*, X:i4, Y:i2}'
Binder : TakeOne(*1: R, [if] false, [else] Error(ErrBadType_Src_Dst))
Reducer: Error(ErrBadType_Src_Dst)
###
> TakeOne(R, [if] true, [else] 0) // Error.
TakeOne(R, [if] true, [else] 0) : {S:{X:i4}*, X:i4, Y:i2}
*** Error: (29,30) Node: 0, Message: Invalid operand type: cannot convert type 'i8' to '{S:{X:i4}*, X:i4, Y:i2}'
Binder : TakeOne(*1: R, [if] true, [else] Error(ErrBadType_Src_Dst))
Reducer: TakeOne(R, [else] Error(ErrBadType_Src_Dst))
###
> TakeOne(R, [if] true, [else] -1) // Error.
TakeOne(R, [if] true, [else] -1) : {S:{X:i4}*, X:i4, Y:i2}
*** Error: (29,30) Node: -1, Message: Invalid operand type: cannot convert type 'i8' to '{S:{X:i4}*, X:i4, Y:i2}'
Binder : TakeOne(*1: R, [if] true, [else] Error(ErrBadType_Src_Dst))
Reducer: TakeOne(R, [else] Error(ErrBadType_Src_Dst))
###
> First  ([], [else] -1) // Error.
First([], [else] -1) : v
*** Error: (19,20) Node: -1, Message: Invalid operand type: cannot convert type 'i8' to 'v'
Binder : First*(null, [else] Error(ErrBadType_Src_Dst))
Reducer: Error(ErrBadType_Src_Dst)
###
> First  ([], [else] "hi") // Error.
First([], [else] "hi") : o
*** Error: (19,23) Node: "hi", Message: Invalid operand type: cannot convert type 's' to 'o'
Binder : First*(null, [else] Error(ErrBadType_Src_Dst))
Reducer: Error(ErrBadType_Src_Dst)
###
> First  ([], [else] true) // Error.
First([], [else] true) : v
*** Error: (19,23) Node: true, Message: Invalid operand type: cannot convert type 'b' to 'v'
Binder : First*(null, [else] Error(ErrBadType_Src_Dst))
Reducer: Error(ErrBadType_Src_Dst)
###
> First  (A, [else] 3.5) // Error.
First(A, [else] 3.5) : i8
*** Error: (18,21) Node: 3.5, Message: Invalid operand type: cannot convert type 'r8' to 'i8'
Binder : First*(A, [else] Error(ErrBadType_Src_Dst))
Reducer: TakeOne(A, [else] Error(ErrBadType_Src_Dst))
###
> First  (A, [else] "hello") // Error.
First(A, [else] "hello") : i8?
*** Error: (18,25) Node: "hello", Message: Invalid operand type: cannot convert type 's' to 'i8?'
Binder : First*(A, [else] Error(ErrBadType_Src_Dst))
Reducer: TakeOne(A, [else] Error(ErrBadType_Src_Dst))
###
> First  (R, [else] 0) // Error.
First(R, [else] 0) : {S:{X:i4}*, X:i4, Y:i2}
*** Error: (18,19) Node: 0, Message: Invalid operand type: cannot convert type 'i8' to '{S:{X:i4}*, X:i4, Y:i2}'
Binder : First*(R, [else] Error(ErrBadType_Src_Dst))
Reducer: TakeOne(R, [else] Error(ErrBadType_Src_Dst))
###
> First  (R, [else] -1) // Error.
First(R, [else] -1) : {S:{X:i4}*, X:i4, Y:i2}
*** Error: (18,19) Node: -1, Message: Invalid operand type: cannot convert type 'i8' to '{S:{X:i4}*, X:i4, Y:i2}'
Binder : First*(R, [else] Error(ErrBadType_Src_Dst))
Reducer: TakeOne(R, [else] Error(ErrBadType_Src_Dst))
###
> First  (R, true, -1) // Error.
First(R, true, -1) : {S:{X:i4}*, X:i4, Y:i2}
*** Error: (17,18) Node: -1, Message: Invalid operand type: cannot convert type 'i8' to '{S:{X:i4}*, X:i4, Y:i2}'
Binder : First*(*1: R, true, Error(ErrBadType_Src_Dst))
Reducer: TakeOne(R, [else] Error(ErrBadType_Src_Dst))
###
> First  (R, [if] false, [else] 0) // Error.
First(R, [if] false, [else] 0) : {S:{X:i4}*, X:i4, Y:i2}
*** Error: (30,31) Node: 0, Message: Invalid operand type: cannot convert type 'i8' to '{S:{X:i4}*, X:i4, Y:i2}'
Binder : First*(*1: R, [if] false, [else] Error(ErrBadType_Src_Dst))
Reducer: Error(ErrBadType_Src_Dst)
###
> First  (R, [if] true, [else] 0) // Error.
First(R, [if] true, [else] 0) : {S:{X:i4}*, X:i4, Y:i2}
*** Error: (29,30) Node: 0, Message: Invalid operand type: cannot convert type 'i8' to '{S:{X:i4}*, X:i4, Y:i2}'
Binder : First*(*1: R, [if] true, [else] Error(ErrBadType_Src_Dst))
Reducer: TakeOne(R, [else] Error(ErrBadType_Src_Dst))
###
> First  (R, [if] true, [else] -1) // Error.
First(R, [if] true, [else] -1) : {S:{X:i4}*, X:i4, Y:i2}
*** Error: (29,30) Node: -1, Message: Invalid operand type: cannot convert type 'i8' to '{S:{X:i4}*, X:i4, Y:i2}'
Binder : First*(*1: R, [if] true, [else] Error(ErrBadType_Src_Dst))
Reducer: TakeOne(R, [else] Error(ErrBadType_Src_Dst))
###
> TakeAt(Range(5), 0)
TakeAt(Range(5), 0) : i8
Binder : TakeAt(Range(5), 0)
Reducer: TakeOne(Range(5))
###
> TakeAt(Range(5), 0, null)
TakeAt(Range(5), 0, null) : i8?
Binder : TakeAt(Range(5), 0, null)
Reducer: TakeOne(Range(5), [else] null)
###
> TakeAt(Range(5), 0, [else] -1)
TakeAt(Range(5), 0, [else] -1) : i8
Binder : TakeAt(Range(5), 0, [else] -1)
Reducer: TakeOne(Range(5), [else] -1)
###
> TakeAt(Range(5), 4)
TakeAt(Range(5), 4) : i8
Binder : TakeAt(Range(5), 4)
###
> TakeAt(Range(5), 5)
TakeAt(Range(5), 5) : i8
Binder : TakeAt(Range(5), 5)
Reducer: 0
###
> TakeAt(Range(5), -1)
TakeAt(Range(5), -1) : i8
Binder : TakeAt(Range(5), -1)
Reducer: TakeAt(Range(5), 4)
###
> TakeAt(Range(5), -5)
TakeAt(Range(5), -5) : i8
Binder : TakeAt(Range(5), -5)
Reducer: TakeOne(Range(5))
###
> TakeAt(Range(5), -6)
TakeAt(Range(5), -6) : i8
Binder : TakeAt(Range(5), -6)
Reducer: 0
###
> TakeAt(Range(5), b)
TakeAt(Range(5), b) : i8
Binder : TakeAt(Range(5), Num<i8>(b))
###
> TakeAt(Range(5), X)
TakeAt(Range(5), X) : i8
Binder : TakeAt(Range(5), Num<i8>(X))
###
> TakeAt(["A", "B", "C"], 0)
TakeAt(["A", "B", "C"], 0) : s
Binder : TakeAt(["A", "B", "C"], 0)
Reducer: "A"
###
> TakeAt(["A", "B", "C"], 2)
TakeAt(["A", "B", "C"], 2) : s
Binder : TakeAt(["A", "B", "C"], 2)
Reducer: "C"
###
> TakeAt(["A", "B", "C"], 3)
TakeAt(["A", "B", "C"], 3) : s
Binder : TakeAt(["A", "B", "C"], 3)
Reducer: str(<null>)
###
> TakeAt(["A", "B", "C"], -1)
TakeAt(["A", "B", "C"], -1) : s
Binder : TakeAt(["A", "B", "C"], -1)
Reducer: "C"
###
> TakeAt(["A", "B", "C"], -3)
TakeAt(["A", "B", "C"], -3) : s
Binder : TakeAt(["A", "B", "C"], -3)
Reducer: "A"
###
> TakeAt(["A", "B", "C"], -4)
TakeAt(["A", "B", "C"], -4) : s
Binder : TakeAt(["A", "B", "C"], -4)
Reducer: str(<null>)
###
> TakeAt([4, 5, 6], 2)
TakeAt([4, 5, 6], 2) : i8
Binder : TakeAt([4, 5, 6], 2)
Reducer: 6
###
> TakeAt([4, 5, 6], 2, null)
TakeAt([4, 5, 6], 2, null) : i8?
Binder : TakeAt([4, 5, 6], 2, null)
Reducer: Opt<i8?>(6)
###
> TakeAt([4, 5, 6], 3, null)
TakeAt([4, 5, 6], 3, null) : i8?
Binder : TakeAt([4, 5, 6], 3, null)
Reducer: null
###
> TakeAt(A, X)
TakeAt(A, X) : i8
Binder : TakeAt(A, Num<i8>(X))
###
> TakeAt(R, X)
TakeAt(R, X) : {S:{X:i4}*, X:i4, Y:i2}
Binder : TakeAt(R, Num<i8>(X))
###
> TakeAt(R.S, X)
TakeAt(R.S, X) : {X:i4}*
Binder : TakeAt(ForEach(*1: R, *1.S), Num<i8>(X))
###
> TakeAt([{ S: 1 }], 2)
TakeAt([{ S : 1 }], 2) : {S:i8}
Binder : TakeAt([{S:1}], 2)
Reducer: dflt<{S:i8}>
###
> TakeAt(SA, 0)
TakeAt(SA, 0) : i8*
Binder : TakeAt(SA, 0)
###
> TakeAt(SA, -1)
TakeAt(SA, -1) : i8*
Binder : TakeAt(SA, -1)
###
> TakeAt(SA, X)
TakeAt(SA, X) : i8*
Binder : TakeAt(SA, Num<i8>(X))
###
> TakeAt([], 0)
TakeAt([], 0) : v
Binder : TakeAt(null, 0)
Reducer: dflt<v>
###
> TakeAt([], 1)
TakeAt([], 1) : v
Binder : TakeAt(null, 1)
Reducer: dflt<v>
###
> TakeAt([], -1)
TakeAt([], -1) : v
Binder : TakeAt(null, -1)
Reducer: dflt<v>
###
> TakeAt([], X)
TakeAt([], X) : v
Binder : TakeAt(null, Num<i8>(X))
Reducer: dflt<v>
###
> TakeAt([], b)
TakeAt([], b) : v
Binder : TakeAt(null, Num<i8>(b))
Reducer: dflt<v>
###
> TakeAt(SV, X)
TakeAt(SV, X) : v
Binder : TakeAt(SV, Num<i8>(X))
###
> TakeAt(SA, B)
TakeAt(SA, B) : i8**
Binder : ForEach(*1: B, Guard(?2: *1, TakeAt(SA, ?2)))
###
> TakeAt(A, null)
TakeAt(A, null) : i8?
Binder : Guard(?1: null, TakeAt(A, Unit<i8>(?1)))
Reducer: null
###
> TakeAt([], null)
TakeAt([], null) : o
Binder : Guard(?1: null, TakeAt(null, Unit<i8>(?1)))
Reducer: null
###
> TakeAt(Range(5), -10, [else] null)
TakeAt(Range(5), -10, [else] null) : i8?
Binder : TakeAt(Range(5), -10, [else] null)
Reducer: null
###
> TakeAt(Range(5), X, null)
TakeAt(Range(5), X, null) : i8?
Binder : TakeAt(Range(5), Num<i8>(X), null)
###
> TakeAt(R, X, [else] null)
TakeAt(R, X, [else] null) : {S:{X:i4}*, X:i4, Y:i2}?
Binder : TakeAt(R, Num<i8>(X), [else] null)
###
> TakeAt(B, X, [else] -1)
TakeAt(B, X, [else] -1) : i8?
Binder : TakeAt(B, Num<i8>(X), [else] Opt<i8?>(-1))
###
> TakeAt(Range(5)->TakeIf(false), X)
TakeAt(Range(5)->TakeIf(false), X) : i8
Binder : TakeAt(TakeIf*(*1: Range(5), false), Num<i8>(X))
Reducer: 0
###
> TakeAt(Range(5)->TakeIf(false), X, null)
TakeAt(Range(5)->TakeIf(false), X, null) : i8?
Binder : TakeAt(TakeIf*(*1: Range(5), false), Num<i8>(X), null)
Reducer: null
###
> TakeAt(s: A, X) // Error.
TakeAt(s : A, X) : i8
*** Error: (7,8) Node: s : A, Tok: 's', Message: Unexpected name
Binder : TakeAt(A, Num<i8>(X))
###
> TakeAt(A, [else] 1) // Error.
TakeAt(A, [else] 1) : i8
*** Error: (10,16) Node: [else] 1, Tok: '[else]', Message: Unexpected directive
Binder : TakeAt(A, 1)
###
> TakeAt([else] A, 1) // Error.
TakeAt([else] A, 1) : i8
*** Error: (7,13) Node: [else] A, Tok: '[else]', Message: Unexpected directive
Binder : TakeAt(A, 1)
###
> TakeAt(A, X, [if] 1) // Error.
TakeAt(A, X, [if] 1) : i8
*** Error: (13,17) Node: [if] 1, Tok: '[if]', Message: Unexpected directive
Binder : TakeAt(A, Num<i8>(X), 1)
###
> TakeAt([], 5, 10) // Error.
TakeAt([], 5, 10) : v
*** Error: (14,16) Node: 10, Message: Invalid operand type: cannot convert type 'i8' to 'v'
Binder : TakeAt(null, 5, Error(ErrBadType_Src_Dst))
Reducer: Error(ErrBadType_Src_Dst)
###
> TakeAt(B, X, [else] 3.14) // Error.
TakeAt(B, X, [else] 3.14) : i8?
*** Error: (20,24) Node: 3.14, Message: Invalid operand type: cannot convert type 'r8' to 'i8?'
Binder : TakeAt(B, Num<i8>(X), [else] Error(ErrBadType_Src_Dst))
###
> TakeAt(R, X, [else] 0) // Error.
TakeAt(R, X, [else] 0) : {S:{X:i4}*, X:i4, Y:i2}
*** Error: (20,21) Node: 0, Message: Invalid operand type: cannot convert type 'i8' to '{S:{X:i4}*, X:i4, Y:i2}'
Binder : TakeAt(R, Num<i8>(X), [else] Error(ErrBadType_Src_Dst))
###
> TakeAt(R, X, [else] R.S) // Error.
TakeAt(R, X, [else] R.S) : {S:{X:i4}*, X:i4, Y:i2}?
*** Error: (21,22) Node: R.S, Message: Invalid operand type: cannot convert type '{X:i4}**' to '{S:{X:i4}*, X:i4, Y:i2}?'
Binder : TakeAt(R, Num<i8>(X), [else] Error(ErrBadType_Src_Dst))
###
> TakeAt(["A", "B", "C"], X, [else] 0) // Error.
TakeAt(["A", "B", "C"], X, [else] 0) : s
*** Error: (34,35) Node: 0, Message: Invalid operand type: cannot convert type 'i8' to 's'
Binder : TakeAt(["A", "B", "C"], Num<i8>(X), [else] Error(ErrBadType_Src_Dst))
###
