É possível introduzir variáveis de tipo adicionais em uma restrição de superclasse?

Ao lidar com famílias de tipos, geralmente é útil usar restrições de igualdade para evitar a necessidade de repetir o nome de alguma função de tipo em uma assinatura:

class Foo f where
  type BulkyAssociatedType f :: *
  foo :: BulkyAssociatedType f -> f
  ...

bar :: forall m f b .
       ( Monad m, Foo f, b ~ BulkyAssociatedType f
       , Monoid b, Monoid (m b)
       ) => f -> m f

Isso funciona mesmo que a abreviação não apareça na própria assinatura, apenas nas restrições.

Com as aulas, isso aparentemente não é possível;

class ( Foo f, b ~ BulkyAssociatedType f, Monoid b, ...) => Bar f

reclama sobre a variável de tipob não estar no escopo.

Existe alguma maneira de conseguir algo semelhante, para evitar um pouco de repetições?

questionAnswers(1)

yourAnswerToTheQuestion