Implementing a Square Dance Call

Each square dance call is represented by a struct that is a subtype of `SquareDanceCall`.

It should have an `as_text` method which provides a description of the call – what a caller might say.

It should have a can_do_from method.

It should either have a struct field named role which can be used to restrict the call to only apply to certain dancers. If it is not appropriate for the call to be restricted to a role (for example, the latter parts of a multi-part call), then the call should instead implement a restricted_to method that returns a vector of DancerStates for the dancers that will perform the call.

It should either have a perform method or an expand_parts method.

Se the source code for examples.