Можно ли ввести дополнительные переменные типа в ограничение суперкласса?

При работе с семействами типов часто удобно использовать ограничения на равенство, чтобы избежать необходимости повторения некоторой функции типа 'имя в подписи:

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

Это работает, даже если сокращение нене в самой подписи, только в ограничениях.

С классами это, по-видимому, невозможно;

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

жалуется на переменную типаb не быть в сфере.

Есть ли какой-то способ достичь подобной вещи, чтобы избежать частых повторений?

Ответы на вопрос(1)

Ваш ответ на вопрос