Polymorphic demand, the denoted thing is evaluated arbitrarily deep,
with the specified cardinality at every level. The Boxity applies only
to the outer evaluation context as well as all inner evaluation context.
See Note [Boxity in Poly] for why we want it to carry Boxity.
Expands to Call via viewCall and to Prod via viewProd.
Poly b n is semantically equivalent to Prod b [n :* Poly b n, ...]
or Call n (Poly Boxed n)@. viewCall and viewProd do these rewrites.
In Note [Demand notation]: L === P(L,L,...) and L === C(L),
B === P(B,B,...) and B === C(B),
!A === !P(A,A,...) and !A === C(A),
and so on.
We'll only see Poly with C_10 (B), C_00 (A), C_0N (L) and sometimes
C_1N (S) through plusSubDmd, never C_01 (M) or C_11 (1) (grep the
source code). Hence CardNonOnce, which is closed under lub and plus.
Why doesn't this constructor simply carry a Demand instead of its fields?
See Note [Call SubDemand vs. evaluation Demand].