Originally I thought "you wouldn't want to return a list of circled things, because how would you know if it was a circled list or a list of circles":
>> circled [a ([b c])]
== [b c]
>> circled [a (b) (c)]
== [b c]
But SPLICE! Can Disambiguate That!
>> circled [a ([b c])]
== [b c]
>> circled [a (b) (c)]
== \~[b c]~\ ; antiform (splice!)
If you need to narrow the types, you can do that by constraining your variables, so the constraint "sticks" for future assignments:
constrain word! x: circled [a (b) c]
Or you can just do a one-off and ENSURE the type is what you expect for this single evaluation.
; Select more than one of the following
;
data: [(a) b c d (e)]
x: ensure splice! circled data
For that matter, dialected function calls could let you say exactly how many things you want... succinctly!
; Select any two of the following
;
data: [(a) b c d (e)]
x: circled/2 data
The creature from the alternate language evolution timeline strikes again!
![]()