假设我有Heap a
type where Heap
is type constructor of kind * -> *
。堆上的许多基本操作都要求a
类型是Ord
类型类的实例。
data Heap a = ...
findMin :: Ord a => Heap a -> a
deleteMin :: Ord a => Heap a -> Heap a
一旦类型参数是类型类的实例,我想将我的类型声明Heap
为类型类的实例(通过和函数很容易表达)。Foldable
a
Ord
findMin
deleteMin
当我们处理需要 kind 类型的类型类时,这种关系可以很容易地表达出来*
,例如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
是否可以在此类实例声明中对类型参数施加约束?