type Aux[R, S <: Boolean, W <: IntP, N <: NativeType, P] = Candidate[R] { type OutS = S; type OutW = W; type OutN = N; type OutP = P; }
type AuxM[R, S <: Boolean, W <: IntP, N <: NativeType, P, SMask <: Boolean, WMask <: IntP] = Aux[R, S, W, N, P] { type OutSMask = SMask; type OutWMask = WMask; }