Note though, it doesn't mean the same thing to say (Foo a, Bar a b) => ... as it does to say
Foo a => Bar a b => ...
The latter can use Foo a when working on Bar a b, but not Bar a b to discharge Foo a, which makes a difference when you have functional dependencies.
So in some sense the 'pattern requires/supplies' split is just that.
That said, Richard's other option
pattern Foo a => P :: Bar a => a
has the benefit that it looks a bit like the old datatype contexts (but here applied to the constructor/pattern).
If we expect the left hand side or the right hand side to be most often trivial then that may be worth considering.
You'd occasionally have things like
pattern (Num a, Eq a) => Foo :: a
for
pattern Foo = 8
but most of the time they'd wind up just looking like a GADT constructor.
-Edward