Perhaps it's better to think of '@' and '@@' as working with different contexts. S02 says that there are three main contexts (void, scalar, and list); that scalar context has a number of "sub-contexts" (boolean, integer, number, and string), and that list context has a number of sub-contexts based on the container type. The difference between '@' and '@@' seems to be 'list context' vs. 'lisp context', as it were - i.e., whether or not nested lists should be flattened. How this maps to required roles, I'm still not sure.
-- Jonathan "Dataweaver" Lang