> data Predicate a = Any | Pred (S.Set a)
data Product a = Pany | Prod (S.Set(Predicate a, S.Set(Product a)))

Does this fit:

data Predicate a = Any | Pred  a
data Product a = Pred' (Predicate a) |  Prod (Product a)

?