It seems in order to "translate" (analyze) the list of specs, the contents of the ISpec
instance given need to be destructured in all cases. A list has to be obtained and seen through. No matter how many layers of abstraction you weave in, the SpecTranslator
will finally need a list.
In your case I'd think of ISpec
as a factory. If the list is not lazily calculated there is no value in it.
Also, simplicity is an important design principle. As ISpec
does not add any capability or architectural freedom it does not carry its own weight.