Heap
türünde * -> *
türünde bir kurucu olan Heap a
türüne sahip olduğumu varsayalım. Yığın üzerindeki birçok temel işlem, a
türünün Ord
tür sınıfının bir örneği olmasını gerektirir.Türlü örneklerin türleri için tür sınırlamaları * -> *
data Heap a = ...
findMin :: Ord a => Heap a -> a
deleteMin :: Ord a => Heap a -> Heap a
Ben (findMin
ve deleteMin
fonksiyonları aracılığıyla ifade etmek kolay olacaktır) en kısa sürede a
tür parametresi Ord
tip sınıfının bir örneğidir olarak Foldable
tipi sınıfının bir örneği olarak benim Heap
türü bildirmek istiyorum.
biz Show
gibi nazik *
tipini gerektiren tip sınıfları konusunu ele alırken ilişkinin Bu tür easely ifade edilebilir:
instance Show a => Show (Heap a) where
show h = ...
Ama elimdeki sorunları bildirimiyle Foldable
ait:
instance Foldable Heap where
-- Ouch, there is no `a` type parameter to put the constraint on!
foldr f z h = ...
Bu örnek beyanda a
tip parametresi üzerinde kısıtlama koymak mümkün mü?
[Bu şeyler] 'e bir göz atın (http://blog.omega-prime.co.uk/?p=127). Monadlarla benzer bir şey yapıyorlar. – phg
Link için çok teşekkür ederim, ConstraintKind' _really_ ilginç şeyler! –
Btw, 'findMin' gerçekten bir' Ord' örneğini gerektirmiyor mu? – yairchu