The contents of `qualtran.symbolics` should explain how these helpers are used. Examples of how Shaped and HasLength can be used (and why)