假设我有Heap a类型Heap的类型构造函数* -> *.堆上的许多基本操作都要求a类型是Ord类类的实例.
data Heap a = ...
findMin :: Ord a => Heap a -> a
deleteMin :: Ord a => Heap a -> Heap a
Run Code Online (Sandbox Code Playgroud)
我想将Heap类型声明为Foldable类型类的实例,只要a类型参数是Ord类型类的实例(它将很容易表达通过findMin和deleteMin函数).
当我们处理需要类型的类型类时,可以很容易地表达这种关系*,例如Show:
instance Show a => Show (Heap a) where
show h = ...
Run Code Online (Sandbox Code Playgroud)
但是我在申报时遇到了问题Foldable:
instance Foldable Heap where
-- Ouch, there is no …Run Code Online (Sandbox Code Playgroud)