Try something like
import Control.Monad (guard)
data A = A | B | B1 | B2 deriving Eq
aux [x, y] = concat
[ guard (x == A && y == B) >> [[A, B1]]
, guard (x == A && y == B) >> [[A, B2]]]
This is just using the list monad and to build up arguments, if the condition is false we just give the empty list, and then concating the results.