A structure is a set of Moose::Meta::TypeConstraint that are 'aggregated' in such a way as that they are all applied to an incoming list of arguments.
The idea here is that a Type Constraint could be something like,
"An Int followed by an Int and then a Str" and that this could be done so with a declaration like:

Tuple[Int,Int,Str]; ## Example syntax

So a structure is a list of Type constraints (the "Int,Int,Str" in the above example) which are intended to function together.

Give you a better peek into what's causing the error. For now we stringify the incoming deep value with Devel::PartialDump and pass that on to either your custom error message or the default one. In the future we'll try to provide a more complete stack trace of the actual offending elements