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?