Wpisz ograniczenia parametrów dla wystąpień klas typów z rodzajem * -> *

Przypuśćmy, że mamHeap a wpisz gdzieHeap jest konstruktorem typu rodzaju* -> *. Wiele podstawowych operacji na stercie wymagaa wpisz jako instancjęOrd klasa typu.

data Heap a = ...

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

Chcę ogłosić mojeHeap wpisz jako wystąpienieFoldable wpisz klasę jak najszybcieja parametr type jest instancjąOrd klasa typu (łatwo będzie wyrazić przezfindMin ideleteMin Funkcje).

Ten rodzaj relacji można łatwo wyrazić, gdy mamy do czynienia z klasami typów, które wymagają rodzaju*, lubićShow:

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

Ale mam problemy z deklaracjąFoldable:

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

Czy można narzucić ograniczeniea parametr typu w takiej deklaracji instancji?

questionAnswers(2)

yourAnswerToTheQuestion