**** New globals: {A:i8*, B:i8?*, R:{S:{X:i4}*, X:i4, Y:i2}*, SV:v*, X:i4, b:b}

> TakeIf(a : A, a > 100)
TakeIf(a : A, a $> 100) : i8*
Binder : TakeIf*(*1: A, *1 @> 100)
Reducer: Take(*1: A, [if] *1 @> 100)
###
> DropIf(a : A, [if] a > 100)
DropIf(a : A, [if] a $> 100) : i8*
Binder : DropIf*(*1: A, [if] *1 @> 100)
Reducer: Drop(*1: A, [if] *1 @> 100)
###
> TakeIf(b : B, [if] b > 100)
TakeIf(b : B, [if] b $> 100) : i8?*
Binder : TakeIf*(*1: B, [if] *1 $> 100)
Reducer: Take(*1: B, [if] *1 $> 100)
###
> DropIf(b : B, b > 100)
DropIf(b : B, b $> 100) : i8?*
Binder : DropIf*(*1: B, *1 $> 100)
Reducer: Drop(*1: B, [if] *1 $> 100)
###
> TakeIf(a : A, [while] a > 100) // Error.
TakeIf(a : A, [while] a $> 100) : i8*
*** Error: (14,21) Node: [while] a $> 100, Tok: '[while]', Message: Unexpected directive
Binder : TakeIf*(*1: A, *1 @> 100)
Reducer: Take(*1: A, [if] *1 @> 100)
###
> TakeIf([if] a : A, a > 100) // Error.
TakeIf([if] a : A, a $> 100) : i8*
*** Error: (7,11) Node: [if] a : A, Tok: '[if]', Message: Unexpected directive
Binder : TakeIf*(*1: A, *1 @> 100)
Reducer: Take(*1: A, [if] *1 @> 100)
###
> TakeIf(a : A, [else] a > 100) // Error.
TakeIf(a : A, [else] a $> 100) : i8*
*** Error: (14,20) Node: [else] a $> 100, Tok: '[else]', Message: Unexpected directive
Binder : TakeIf*(*1: A, *1 @> 100)
Reducer: Take(*1: A, [if] *1 @> 100)
###
> TakeIf(x : "hello", true)
TakeIf(x : "hello", true) : s*
*** Error: (11,18) Node: "hello", Message: Invalid operand type: cannot convert type 's' to 's*'
Binder : TakeIf*(*1: Error(ErrBadType_Src_Dst), true)
Reducer: Error(ErrBadType_Src_Dst)
###
> TakeIf(x : A, true)
TakeIf(x : A, true) : i8*
Binder : TakeIf*(*1: A, true)
Reducer: A
###
> TakeIf(x : A, false)
TakeIf(x : A, false) : i8*
Binder : TakeIf*(*1: A, false)
Reducer: null
###
> TakeIf(x : A, null)
TakeIf(x : A, null) : i8*
*** Error: (14,18) Node: null, Message: Invalid operand type: cannot convert type 'o' to 'b'
Binder : TakeIf*(*1: A, Error(ErrBadType_Src_Dst))
Reducer: Take(*1: A, [if] Error(ErrBadType_Src_Dst))
###
> DropIf(x : "hello", true)
DropIf(x : "hello", true) : s*
*** Error: (11,18) Node: "hello", Message: Invalid operand type: cannot convert type 's' to 's*'
Binder : DropIf*(*1: Error(ErrBadType_Src_Dst), true)
Reducer: null
###
> DropIf(x : A, true)
DropIf(x : A, true) : i8*
Binder : DropIf*(*1: A, true)
Reducer: null
###
> DropIf(x : A, false)
DropIf(x : A, false) : i8*
Binder : DropIf*(*1: A, false)
Reducer: A
###
> DropIf(x : A, null)
DropIf(x : A, null) : i8*
*** Error: (14,18) Node: null, Message: Invalid operand type: cannot convert type 'o' to 'b'
Binder : DropIf*(*1: A, Error(ErrBadType_Src_Dst))
Reducer: Drop(*1: A, [if] Error(ErrBadType_Src_Dst))
###
> Take(A, 5)
Take(A, 5) : i8*
Binder : Take(A, 5)
###
> Drop(A, 5)
Drop(A, 5) : i8*
Binder : Drop(A, 5)
###
> Take(a : A, 5, [if] a > 100)
Take(a : A, 5, [if] a $> 100) : i8*
Binder : Take(*1: A, 5, [if] *1 @> 100)
###
> Take(a : A, 5, [while] a > 100)
Take(a : A, 5, [while] a $> 100) : i8*
Binder : Take(*1: A, 5, [while] *1 @> 100)
###
> Drop(a : A, 5, a > 100)
Drop(a : A, 5, a $> 100) : i8*
Binder : Drop(*1: A, 5, *1 @> 100)
###
> Take(a : A, [else] X) // Error.
Take(a : A, [else] X) : i8*
*** Error: (5,6) Node: a : A, Tok: 'a', Message: Unexpected name
*** Error: (12,18) Node: [else] X, Tok: '[else]', Message: Unexpected directive
Binder : Take(A, Num<i8>(X))
###
> Take(a : A, 5, [else] a > 100) // Error.
Take(a : A, 5, [else] a $> 100) : i8*
*** Error: (15,21) Node: [else] a $> 100, Tok: '[else]', Message: Unexpected directive
Binder : Take(*1: A, 5, *1 @> 100)
###
> Take(a : A, [if] 5, a > 100) // Error.
Take(a : A, [if] 5, a $> 100) : i8*
*** Error: (12,16) Node: [if] 5, Tok: '[if]', Message: Unexpected directive
Binder : Take(*1: A, 5, *1 @> 100)
###
> Take(A, X)
Take(A, X) : i8*
Binder : Take(A, Num<i8>(X))
###
> Drop(A, X)
Drop(A, X) : i8*
Binder : Drop(A, Num<i8>(X))
###
> Take(a : A, X, a > 100)
Take(a : A, X, a $> 100) : i8*
Binder : Take(*1: A, Num<i8>(X), *1 @> 100)
###
> Drop(a : A, X, [if] a > 100)
Drop(a : A, X, [if] a $> 100) : i8*
Binder : Drop(*1: A, Num<i8>(X), [if] *1 @> 100)
###
> Take(a : A, X, [while] a > 100)
Take(a : A, X, [while] a $> 100) : i8*
Binder : Take(*1: A, Num<i8>(X), [while] *1 @> 100)
###
> Drop(a : A, X, [while] a > 100)
Drop(a : A, X, [while] a $> 100) : i8*
Binder : Drop(*1: A, Num<i8>(X), [while] *1 @> 100)
###
> Take(R, X)
Take(R, X) : {S:{X:i4}*, X:i4, Y:i2}*
Binder : Take(R, Num<i8>(X))
###
> Drop(R, X)
Drop(R, X) : {S:{X:i4}*, X:i4, Y:i2}*
Binder : Drop(R, Num<i8>(X))
###
> Take(R, X, X > Y)
Take(R, X, X $> Y) : {S:{X:i4}*, X:i4, Y:i2}*
Binder : Take(*1: R, Num<i8>(X), *1.X @> Num<i4>(*1.Y))
###
> Drop(R, X, X > Y)
Drop(R, X, X $> Y) : {S:{X:i4}*, X:i4, Y:i2}*
Binder : Drop(*1: R, Num<i8>(X), *1.X @> Num<i4>(*1.Y))
###
> Take(R, [if]  b)
Take(R, [if] b) : {S:{X:i4}*, X:i4, Y:i2}*
Binder : Take(*1: R, [if] b)
###
> Drop(R, [if]  b)
Drop(R, [if] b) : {S:{X:i4}*, X:i4, Y:i2}*
Binder : Drop(*1: R, [if] b)
###
> Take(R, [if]  true)
Take(R, [if] true) : {S:{X:i4}*, X:i4, Y:i2}*
Binder : Take(*1: R, [if] true)
Reducer: R
###
> Drop(R, [if]  true)
Drop(R, [if] true) : {S:{X:i4}*, X:i4, Y:i2}*
Binder : Drop(*1: R, [if] true)
Reducer: null
###
> Take(R, [if]  false)
Take(R, [if] false) : {S:{X:i4}*, X:i4, Y:i2}*
Binder : Take(*1: R, [if] false)
Reducer: null
###
> Drop(R, [if]  false)
Drop(R, [if] false) : {S:{X:i4}*, X:i4, Y:i2}*
Binder : Drop(*1: R, [if] false)
Reducer: R
###
> Take(R, [while]  b)
Take(R, [while] b) : {S:{X:i4}*, X:i4, Y:i2}*
Binder : Take(*1: R, [while] b)
###
> Drop(R, [while]  b)
Drop(R, [while] b) : {S:{X:i4}*, X:i4, Y:i2}*
Binder : Drop(*1: R, [while] b)
###
> Take(R, [while]  true)
Take(R, [while] true) : {S:{X:i4}*, X:i4, Y:i2}*
Binder : Take(*1: R, [while] true)
Reducer: R
###
> Drop(R, [while]  true)
Drop(R, [while] true) : {S:{X:i4}*, X:i4, Y:i2}*
Binder : Drop(*1: R, [while] true)
Reducer: null
###
> Take(R, [while]  false)
Take(R, [while] false) : {S:{X:i4}*, X:i4, Y:i2}*
Binder : Take(*1: R, [while] false)
Reducer: null
###
> Drop(R, [while]  false)
Drop(R, [while] false) : {S:{X:i4}*, X:i4, Y:i2}*
Binder : Drop(*1: R, [while] false)
Reducer: R
###
> Take(null, X)
Take(null, X) : o*
Binder : Take(null, Num<i8>(X))
Reducer: null
###
> Take([], X)
Take([], X) : v*
Binder : Take(null, Num<i8>(X))
Reducer: null
###
> Take([], X, b)
Take([], X, b) : v*
Binder : Take(*1: null, Num<i8>(X), b)
Reducer: null
###
> Take(null, [if] b)
Take(null, [if] b) : o*
Binder : Take(*1: null, [if] b)
Reducer: null
###
> Take(null, [while] b)
Take(null, [while] b) : o*
Binder : Take(*1: null, [while] b)
Reducer: null
###
> Take([], [if] b)
Take([], [if] b) : v*
Binder : Take(*1: null, [if] b)
Reducer: null
###
> Take([], [while] b)
Take([], [while] b) : v*
Binder : Take(*1: null, [while] b)
Reducer: null
###
> Take([], X, [if] b)
Take([], X, [if] b) : v*
Binder : Take(*1: null, Num<i8>(X), [if] b)
Reducer: null
###
> Take([], X, [while] b)
Take([], X, [while] b) : v*
Binder : Take(*1: null, Num<i8>(X), [while] b)
Reducer: null
###
> Drop(null, X)
Drop(null, X) : o*
Binder : Drop(null, Num<i8>(X))
Reducer: null
###
> Drop([], X)
Drop([], X) : v*
Binder : Drop(null, Num<i8>(X))
Reducer: null
###
> Drop([], X, b)
Drop([], X, b) : v*
Binder : Drop(*1: null, Num<i8>(X), b)
Reducer: null
###
> Drop(null, [if] b)
Drop(null, [if] b) : o*
Binder : Drop(*1: null, [if] b)
Reducer: null
###
> Drop(null, [while] b)
Drop(null, [while] b) : o*
Binder : Drop(*1: null, [while] b)
Reducer: null
###
> Drop([], [if] b)
Drop([], [if] b) : v*
Binder : Drop(*1: null, [if] b)
Reducer: null
###
> Drop([], [while] b)
Drop([], [while] b) : v*
Binder : Drop(*1: null, [while] b)
Reducer: null
###
> Drop([], X, [if] b)
Drop([], X, [if] b) : v*
Binder : Drop(*1: null, Num<i8>(X), [if] b)
Reducer: null
###
> Drop([], X, [while] b)
Drop([], X, [while] b) : v*
Binder : Drop(*1: null, Num<i8>(X), [while] b)
Reducer: null
###
> Take(A, 0)
Take(A, 0) : i8*
Binder : Take(A, 0)
Reducer: null
###
> Take(A, 0, b)
Take(A, 0, b) : i8*
Binder : Take(*1: A, 0, b)
Reducer: null
###
> Take(A, [if] b)
Take(A, [if] b) : i8*
Binder : Take(*1: A, [if] b)
###
> Take(A, [while] b)
Take(A, [while] b) : i8*
Binder : Take(*1: A, [while] b)
###
> Take(A, 0, [if] b)
Take(A, 0, [if] b) : i8*
Binder : Take(*1: A, 0, [if] b)
Reducer: null
###
> Take(A, 0, [while] b)
Take(A, 0, [while] b) : i8*
Binder : Take(*1: A, 0, [while] b)
Reducer: null
###
> Drop(A, 0)
Drop(A, 0) : i8*
Binder : Drop(A, 0)
Reducer: A
###
> Drop(A, 0, b)
Drop(A, 0, b) : i8*
Binder : Drop(*1: A, 0, b)
Reducer: A
###
> Drop(A, [if] b)
Drop(A, [if] b) : i8*
Binder : Drop(*1: A, [if] b)
###
> Drop(A, [while] b)
Drop(A, [while] b) : i8*
Binder : Drop(*1: A, [while] b)
###
> Drop(A, 0, [if] b)
Drop(A, 0, [if] b) : i8*
Binder : Drop(*1: A, 0, [if] b)
Reducer: A
###
> Drop(A, 0, [while] b)
Drop(A, 0, [while] b) : i8*
Binder : Drop(*1: A, 0, [while] b)
Reducer: A
###
> Take(A, X, true)
Take(A, X, true) : i8*
Binder : Take(*1: A, Num<i8>(X), true)
Reducer: Take(A, Num<i8>(X))
###
> Take(A, X, false)
Take(A, X, false) : i8*
Binder : Take(*1: A, Num<i8>(X), false)
Reducer: null
###
> Take(A, [if] true)
Take(A, [if] true) : i8*
Binder : Take(*1: A, [if] true)
Reducer: A
###
> Take(A, [if] false)
Take(A, [if] false) : i8*
Binder : Take(*1: A, [if] false)
Reducer: null
###
> Take(A, [while] true)
Take(A, [while] true) : i8*
Binder : Take(*1: A, [while] true)
Reducer: A
###
> Take(A, [while] false)
Take(A, [while] false) : i8*
Binder : Take(*1: A, [while] false)
Reducer: null
###
> Take(A, X, [while] true)
Take(A, X, [while] true) : i8*
Binder : Take(*1: A, Num<i8>(X), [while] true)
Reducer: Take(A, Num<i8>(X))
###
> Take(A, X, [while] false)
Take(A, X, [while] false) : i8*
Binder : Take(*1: A, Num<i8>(X), [while] false)
Reducer: null
###
> Drop(A, X, true)
Drop(A, X, true) : i8*
Binder : Drop(*1: A, Num<i8>(X), true)
Reducer: Drop(A, Num<i8>(X))
###
> Drop(A, X, false)
Drop(A, X, false) : i8*
Binder : Drop(*1: A, Num<i8>(X), false)
Reducer: A
###
> Drop(A, [if] true)
Drop(A, [if] true) : i8*
Binder : Drop(*1: A, [if] true)
Reducer: null
###
> Drop(A, [if] false)
Drop(A, [if] false) : i8*
Binder : Drop(*1: A, [if] false)
Reducer: A
###
> Drop(A, [while] true)
Drop(A, [while] true) : i8*
Binder : Drop(*1: A, [while] true)
Reducer: null
###
> Drop(A, [while] false)
Drop(A, [while] false) : i8*
Binder : Drop(*1: A, [while] false)
Reducer: A
###
> Drop(A, X, [while] true)
Drop(A, X, [while] true) : i8*
Binder : Drop(*1: A, Num<i8>(X), [while] true)
Reducer: Drop(A, Num<i8>(X))
###
> Drop(A, X, [while] false)
Drop(A, X, [while] false) : i8*
Binder : Drop(*1: A, Num<i8>(X), [while] false)
Reducer: A
###
> TakeIf(A, true)
TakeIf(A, true) : i8*
Binder : TakeIf*(*1: A, true)
Reducer: A
###
> TakeIf(A, false)
TakeIf(A, false) : i8*
Binder : TakeIf*(*1: A, false)
Reducer: null
###
> DropIf(A, true)
DropIf(A, true) : i8*
Binder : DropIf*(*1: A, true)
Reducer: null
###
> DropIf(A, false)
DropIf(A, false) : i8*
Binder : DropIf*(*1: A, false)
Reducer: A
###
> TakeIf([], b)
TakeIf([], b) : v*
Binder : TakeIf*(*1: null, b)
Reducer: null
###
> DropIf([], b)
DropIf([], b) : v*
Binder : DropIf*(*1: null, b)
Reducer: null
###
> DropOne([])
DropOne([]) : v*
Binder : DropOne*(null)
Reducer: null
###
> DropOne(A, true)
DropOne(A, true) : i8*
Binder : DropOne*(*1: A, true)
Reducer: Drop(A, 1)
###
> DropOne(A, false)
DropOne(A, false) : i8*
Binder : DropOne*(*1: A, false)
Reducer: A
###
> DropOne([], b)
DropOne([], b) : v*
Binder : DropOne*(*1: null, b)
Reducer: null
###
