Felix provides two slice types, these are derived types defined in the library.
A basic slice type:
union slice[T] = | Slice_all | Slice_from of T | Slice_from_counted of T * T /* second arg is count */ | Slice_to_incl of T | Slice_to_excl of T | Slice_range_incl of T * T | Slice_range_excl of T * T | Slice_one of T | Slice_none ;
Slice values can be written like:
.. // all first .. // first to maxval first .+ count // first to first+count exclusive first .. last // inclusive range first ..< past // range exclusing end Slice_one val // single value Slice_none // empty slice
The base type of a slice must be of class Integral, both signed and unsigned types can be used. If there are two parameters they must be the same type.
A value can be tested to see if it is in a slice:
42 in 1..100
Slices are equipped with iterators. This means you can write a loop like:
for v in first .. last perform println$ v ;
If the slice is given with literal integer values the loop is optimised to bypass the iterator closure and use inline range checks.