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.