Heap a
typeがHeap
kind の型コンストラクターであるとし* -> *
ます。ヒープに対する多くの基本的な操作では、型が型クラスa
のインスタンスである必要があります。Ord
data Heap a = ...
findMin :: Ord a => Heap a -> a
deleteMin :: Ord a => Heap a -> Heap a
型パラメーターが型クラスのインスタンスであるとすぐに、型を型クラスHeap
のインスタンスとして宣言したいと思います ( and関数を介して簡単に表現できます)。Foldable
a
Ord
findMin
deleteMin
*
この種の関係は、次のような種類の型を必要とする型クラスを扱うときに簡単に表現できます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
このようなインスタンス宣言で、型パラメータに制約をかけることはできますか?