假設我有Heap a
類型,其中Heap
是種類* -> *
的類型構造函數。堆上的許多基本操作要求a
類型是Ord
類型類的實例。帶類型的類型類型實例的類型參數約束* - > *
data Heap a = ...
findMin :: Ord a => Heap a -> a
deleteMin :: Ord a => Heap a -> Heap a
我想盡快a
類型參數Ord
類型的類的實例聲明我Heap
類型Foldable
型類的一個實例(它會很容易通過findMin
和deleteMin
函數來表示)。
這種關係可當我們需要的那種*
類型類型類,處理像Show
被easely表示:
instance Show a => Show (Heap a) where
show h = ...
但我有問題,與申報的Foldable
:
instance Foldable Heap where
-- Ouch, there is no `a` type parameter to put the constraint on!
foldr f z h = ...
是否可以在這種實例聲明中對a
類型參數設置約束?
看看[這個東西](http://blog.omega-prime.co.uk/?p=127)。他們正在做一些與monads類似的事情。 – phg
非常感謝您的鏈接,'ConstraintKind'是_really_有趣的東西! –
順便說一句,'findMin'真的需要一個'Ord'實例嗎? – yairchu