f(@all)
  echo $all[*]

assert $(f 1) is "1"
assert $(f 1  2  3) is "1 2 3"

g(a b @c)
  echo $c[*] $a $b

assert $(g 1 2) is " 1 2"
assert $(g 1 2 3 4) is "3 4 1 2"

k(-- @ks)
  echo ${ks:keys} ${ks[@]}

assert $(k 1 2) is ""
assert $(k 1 2 --x a) is "x a"
assert $(k 1 2 --y a) is "y a"
assert $(k 1 2  -y a) is "y a"

h(-- x y @ks)
  echo $x $y ${ks:keys}

assert $(h 1 2) is " "
assert $(h 1 2 --x a) is "a "
assert $(h 1 2 --y a) is " a"
assert $(h --x a --y b --z c) is "a b z"

a(@ps -- @ks)
  echo $ps[@] $ks[@]

assert $(a 1 --x 2) is "1 2"
assert $(a 1 --x 3 2) is "1 2 3"

