Digite parâmetros de restrições para instâncias de typeclasses com o tipo * -> *

Suponha que eu tenhaHeap a digite ondeHeap é tipo construtor do tipo* -> *. Muitas operações básicas em heap requerema digite para ser uma instância deOrd tipo de classe.

data Heap a = ...

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

Eu quero declarar minhaHeap digite como uma instância deFoldable digite a classe assim quea parâmetro de tipo é uma instância deOrd tipo de classe (será fácil expressar viafindMin edeleteMin funções).

Esse tipo de relação pode ser expresso facilmente quando lidamos com classes de tipos que requerem tipo de tipo*, gostarShow:

instance Show a => Show (Heap a) where
    show h = ...

Mas eu tenho problemas com declaração deFoldable:

instance Foldable Heap where
    -- Ouch, there is no `a` type parameter to put the constraint on!
    foldr f z h = ...

É possível colocar restrição sobrea parâmetro de tipo em tal declaração de instância?

questionAnswers(2)

yourAnswerToTheQuestion