Range Argument

How does one declare an argument to be a range that can be passed a range that can be any strikeKind, i.e.

param K = .???
const S = ???
const R = L .. M;
const R = L .. M by K;
const R = L .. M by S;


A formal that accepts any strideKind looks like this:

proc p(arg:range(strides=?, bounds=boundKind.both)) { ... }

The bounds specification ensures you can't pass unbounded ranges like L...

For a fully-generic range argument, it is simply:

proc p(arg:range(?)) {...}