15
當類型的家庭打交道,它往往是得心應手等式約束,以避免在簽名重複某種功能的名稱:是否可以將其他類型變量引入超類約束?
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
不在範圍內。
是否有某種方法可以實現類似的事情,以避免一些重複 - 樣板?
這是一個很好的問題。我懷疑答案可能是「不」,但我的懷疑力度不夠,無法作出答案...... –