Id represents names that not only have a Name but also a Type and some additional
details (a IdInfo and one of LocalIdDetails or GlobalIdDetails) that
are added, modified and inspected by various compiler passes. These Var names may either
be global or local, see Var

This predicate says whether the Id has a strict demand placed on it or
has a type such that it can always be evaluated strictly (e.g., an
unlifted type, but see the comment for isStrictType). We need to
check separately whether the Id has a so-called "strict type" because if
the demand for the given id hasn't been computed yet but id has a strict
type, we still want isStrictId id to be True.

One-shot lambdas

Returns whether the lambda associated with the Id is certainly applied at most once
OR we are applying the "state hack" which makes it appear as if theis is the case for
lambdas used in IO. You should prefer using this over isOneShotLambda