मान लीजिए कि मेरे पास Heap a
प्रकार है जहां Heap
प्रकार * -> *
प्रकार का प्रकार है। ढेर पर कई बुनियादी परिचालनों को a
प्रकार Ord
प्रकार वर्ग का उदाहरण होने की आवश्यकता होती है।प्रकार के साथ टाइपक्लास के उदाहरणों के लिए पैरामीटर बाधाएं टाइप करें * -> *
data Heap a = ...
findMin :: Ord a => Heap a -> a
deleteMin :: Ord a => Heap a -> Heap a
मैं (यह findMin
और deleteMin
कार्यों के माध्यम से व्यक्त करने के लिए आसान हो जाएगा) जैसे ही a
प्रकार पैरामीटर Ord
प्रकार वर्ग का एक उदाहरण है Foldable
प्रकार वर्ग का एक उदाहरण के रूप में मेरे Heap
प्रकार की घोषणा करना चाहते हैं।
संबंध इस तरह की easely व्यक्त किया जा सकता है जब हम प्रकार कक्षाएं उस तरह *
के प्रकार की आवश्यकता होती है, के साथ काम कर Show
की तरह: Foldable
की घोषणा के साथ
instance Show a => Show (Heap a) where
show h = ...
लेकिन मैं समस्याओं:
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