Heap atypeがHeapkind の型コンストラクターであるとし* -> *ます。ヒープに対する多くの基本的な操作では、型が型クラスaのインスタンスである必要があります。Ord
data Heap a = ...
findMin :: Ord a => Heap a -> a
deleteMin :: Ord a => Heap a -> Heap a
型パラメーターが型クラスのインスタンスであるとすぐに、型を型クラスHeapのインスタンスとして宣言したいと思います ( and関数を介して簡単に表現できます)。FoldableaOrdfindMindeleteMin
*この種の関係は、次のような種類の型を必要とする型クラスを扱うときに簡単に表現できますShow。
instance Show a => Show (Heap a) where
show h = ...
しかし、次の宣言に問題がありFoldableます:
instance Foldable Heap where
-- Ouch, there is no `a` type parameter to put the constraint on!
foldr f z h = ...
aこのようなインスタンス宣言で、型パラメータに制約をかけることはできますか?