Escriba restricciones de parámetros para instancias de typeclasses con kind * -> *

Supongamos que tengoHeap a escribe dondeHeap es el tipo constructor de tipo* -> *. Muchas operaciones básicas en el montón requieren laa escribe para ser una instancia deOrd tipo de clase

data Heap a = ...

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

Quiero declarar miHeap escribir como una instancia deFoldable tipo de clase tan pronto comoa tipo de parámetro es una instancia deOrd tipo de clase (será fácil de expresar a través defindMin ydeleteMin funciones).

Este tipo de relación se puede expresar fácilmente cuando se trata de clases de tipos que requieren un tipo de clase.*, me gustaShow:

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

Pero tengo problemas con la declaración deFoldable:

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

¿Es posible poner restricción ena tipo de parámetro en tal declaración de instancia?

Respuestas a la pregunta(2)

Su respuesta a la pregunta