Escriba restricciones de parámetros para instancias de typeclasses con kind * -> *
Supongamos que tengoHeap a
escribe dondeHeap
es el tipo constructor de tipo* -> *
. Muchas operaciones básicas en el montón requieren laa
escribe para ser una instancia deOrd
tipo de clase
data Heap a = ...
findMin :: Ord a => Heap a -> a
deleteMin :: Ord a => Heap a -> Heap a
Quiero declarar miHeap
escribir como una instancia deFoldable
tipo de clase tan pronto comoa
tipo de parámetro es una instancia deOrd
tipo de clase (será fácil de expresar a través defindMin
ydeleteMin
funciones).
Este tipo de relación se puede expresar fácilmente cuando se trata de clases de tipos que requieren un tipo de clase.*
, me gustaShow
:
instance Show a => Show (Heap a) where
show h = ...
Pero tengo problemas con la declaración deFoldable
:
instance Foldable Heap where
-- Ouch, there is no `a` type parameter to put the constraint on!
foldr f z h = ...
¿Es posible poner restricción ena
tipo de parámetro en tal declaración de instancia?