s
is an instance of ^a
you want to accept at compile-time, which can be anything that implements the members you actually call using the syntax.^a
is similar to generics which would be 'a
(or 'A
or 'T
for example) but these are compile-time resolved, and allow for anything that fits all the requested usages within the method. (no interfaces required)