Typparametereinschränkungen für Instanzen von Typklassen mit Art * -> *

Angenommen, ich habeHeap a tippe woHeap ist ein Typkonstruktor der Art* -> *. Viele grundlegende Operationen auf dem Heap erfordern diea Typ, von dem eine Instanz sein sollOrd Typenklasse.

data Heap a = ...

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

Ich möchte mein erklärenHeap Typ als Instanz vonFoldable Typenklasse sobalda Typparameter ist eine Instanz vonOrd Typenklasse (leicht auszudrücken überfindMin unddeleteMin funktionen).

Diese Art von Beziehung lässt sich leicht ausdrücken, wenn wir uns mit Typklassen befassen, für die eine Art erforderlich ist*, mögenShow:

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

Ich habe aber Probleme mit der Deklaration vonFoldable:

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

Ist es möglich, Einschränkungen zu setzena Typ Parameter in einer solchen Instanz Deklaration?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage