﻿:: { T:s, Ts:s*, Is:i8*, tup:(i8,i8,i8), tup5:(i8,b,i8,b,i8), a:i8, b:i8, c:i8 }

T[]
T[3]
T["3"]
T[3, 5]

T[^3]
T[%3]
T[&3]
T[^%3]
T[%^3]

T[3:12]
T[^3:12]
T[3:^12]
T[3:*12]
T[3:^*12]
T[3:*^12]

Ts[3]
T[Is]
Ts[Is]

T[Is:7]
T[7:Is]
T[::Is]
Ts[Is:7]
Ts[7:Is]
Ts[::Is]
Ts[Is:Is + 3]

T[^7:Is]
T[7:^Is]
T[7:*Is]
T[7:^*Is]
T[7:*^Is]

T[tup]
T[tup5]
Ts[tup]
Ts[tup5]

Null("X")[tup]
""[tup]
T[Null(3):]

""[3]
"0123456789"[3]
"0123456789"[^3]
"0123456789"[42]
"0123456789"[%42]
"0123456789"[&42]
"0123456789"[^%42]
"0123456789"[-42]
"0123456789"[%-42]
"0123456789"[&-42]
"0123456789"[^%-42]
("0123456789" & "ABCDEF")[a]

""[:3]
"0123456789"[:3]
"0123456789"[:0]
"0123456789"[:42]
"0123456789"[3:7]
"0123456789"[7:3]
"0123456789"[7::-1]
"0123456789"[::-1]
"0123456789"[::2]
"0123456789"[a:3]
"0123456789"[3:b]
"0123456789"[3:7:c]
("0123456789" & "ABCDEF")[::-2]
"0123456789"[Null(a):3]
"0123456789"[Null(a):b]
"0123456789"[Opt(a):3]
"0123456789"[Opt(-17):3]
"0123456789"[Opt(-17):b]

T[Range(10)->Sum(it * a * b)]
T[:Range(10)->Sum(it * a * b)]

T[Range(10) * a * b]
T[:Range(10) * a * b]

// Found by fuzz testing.
ForEach(x:"", With(y: z, {y, A: x[0]}))