Digite parâmetros de restrições para instâncias de typeclasses com o tipo * -> *
Suponha que eu tenhaHeap a
digite ondeHeap
é tipo construtor do tipo* -> *
. Muitas operações básicas em heap requerema
digite para ser uma instância deOrd
tipo de classe.
data Heap a = ...
findMin :: Ord a => Heap a -> a
deleteMin :: Ord a => Heap a -> Heap a
Eu quero declarar minhaHeap
digite como uma instância deFoldable
digite a classe assim quea
parâmetro de tipo é uma instância deOrd
tipo de classe (será fácil expressar viafindMin
edeleteMin
funções).
Esse tipo de relação pode ser expresso facilmente quando lidamos com classes de tipos que requerem tipo de tipo*
, gostarShow
:
instance Show a => Show (Heap a) where
show h = ...
Mas eu tenho problemas com declaração deFoldable
:
instance Foldable Heap where
-- Ouch, there is no `a` type parameter to put the constraint on!
foldr f z h = ...
É possível colocar restrição sobrea
parâmetro de tipo em tal declaração de instância?