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?