Maybe package:ghc

Maybe type indexed by open/closed
Why are two types MaybeApart? MARInfinite takes precedence: This is used (only) in Note [Infinitary substitution in lookup] in GHC.Core.InstEnv As of Feb 2022, we never differentiate between MARTypeFamily and MARTypeVsConstraint; it's really only MARInfinite that's interesting here.
The parameterizable maybe monad, obtained by composing an arbitrary monad with the Maybe monad. Computations are actions that may produce a value or exit. The return function yields a computation that produces that value, while >>= sequences two subcomputations, exiting if either computation does.
Like Maybe, but using unboxed sums. Use with care. Using a unboxed maybe is not always a win in execution *time* even when allocations go down. So make sure to benchmark for execution time as well. If the difference in *runtime* for the compiler is too small to measure it's likely better to use a regular Maybe instead. This is since it causes more function arguments to be passed, and potentially more variables to be captured by closures increasing closure size.
If a label is a local block label then return just its BlockId, otherwise Nothing.
Returns Just w if the operation is an integer comparison with width w, or Nothing otherwise.