I think the simplest way to get the edge cases you want would be using "()," to coerce lists or scalars to lists, and using "() unless" to coerce an empty result with "first" to an empty list.
(),extract () unless first value by value from "ABBBCD" ("A","B","C","D") (),extract () unless first value by value from "AAAA" ("A") (),extract () unless first value by value from "" ()
The former coercion is always valid, but the latter does require some care depending on the data; this is the nasty side of unifying nullity and a numeric value:
(),extract () unless first value by value from 1,1,0,5,1,2,0,1 (1,5,2)
Edit: and another approach entirely would be to use "dict":
range (11,22,33,0,11,22) dict () (11,22,33,0) range (11,11) dict () (11) range (0) dict () (0) range () dict () ()
Depending upon the context, you might not even need the "range".