The compose method creates a com.tubros.constraints.api.VariableName from the given root and the desired index.
The decompose method attempts to break apart the name based on
the ArrayNamingPolicy defined by this trait.
The isArrayMember method determines whether or not the candidate
com.tubros.constraints.api.VariableName is an array variable
previously composed from root.
The isArrayName determines whether or not the candidate is a
com.tubros.constraints.api.VariableName previously composed by
this policy type.
The unlessArrayName method performs the opposite role of
whenArrayName by only executing the block when the
candidate name is not an array name.
The whenArrayName method allows for higher-ordered functions to be
applied when the candidate name has been composed by this
policy.
The ArrayNamingPolicy type serves as a single point of truth for how a com.tubros.constraints.api.VariableName is created when the name references an EDSL scala.Array-style com.tubros.constraints.api.VariableName.