This function first evaluates the argument term into whnf via
whnf and then projects the top-level signature to the desired
subsignature. Failure to do the projection is signalled as a
failure in the monad.

This combinator is a variant of strict that only makes a subset
of the arguments of a functor application strict. The first
argument of this combinator specifies which positions are supposed
to be strict.