Ограничения параметров типа для экземпляров классов типов с видом * -> *

Предположим, у меня естьHeap a типа гдеHeap это конструктор типа* -> *, Многие основные операции с кучей требуютa тип быть экземпляромOrd тип класс.

data Heap a = ...

findMin :: Ord a => Heap a -> a
deleteMin :: Ord a => Heap a -> Heap a

Я хочу объявить мойHeap введите в качестве примера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 параметр типа в таком объявлении экземпляра?

Ответы на вопрос(2)

Ваш ответ на вопрос