Given a
Type and a list of argument types to which the
Type is applied, determine each argument's visibility
(
Inferred,
Specified, or
Required).
Most of the time, the arguments will be
Required, but not
always. Consider
f :: forall a. a -> Type. In
f Type
Bool, the first argument (
Type) is
Specified and
the second argument (
Bool) is
Required. It is
precisely this sort of higher-rank situation in which
appTyForAllTyFlags comes in handy, since
f Type Bool
would be represented in Core using
AppTys. (See also #15792).