2012-03-08 21 views
8

मूल रूप से, {-# LANGUAGE PolymorphicKinds, ConstraintKinds, TypeFamilies #-} (और अधिक, यदि आवश्यक हो) दिया गया है, (~) प्रकार-स्तर ऑपरेटर प्रकार Constraint के प्रकार-स्तर अभिव्यक्तियों पर काम करता है? मैंने जवाब गुगलने की कोशिश की, लेकिन कोई भाग्य नहीं था।बाधाओं पर समानता

+1

प्रश्न अजीब है, लेकिन अच्छी तरह से पूछा गया। जिज्ञासा से, आप एक बाधा समानता के साथ क्या करेंगे? –

+0

@ डैनियल वाग्नेर मैं एक पार-प्रतिमान ईडीएसएल लिख रहा हूं जो एक सामान्य कार्य प्रणाली का उपयोग करता है, और, विभिन्न कारणों से, मैं सीधे प्रकार के वर्गों का उपयोग नहीं कर सकता। मैं इसका उपयोग न करने से दूर हो सकता था, लेकिन यह बेहद घुटनों के प्रकार और संभवतः कुछ अनावश्यक प्रतिबंधों का कारण बन जाएगा –

उत्तर

6

हां, यह संभव है। चूंकि प्रकार Constraint परमाणु प्रकार की बाधाओं के सीमित सेट हैं, तो आप उनकी समानता का परीक्षण आसानी से कर सकते हैं।

PolyKinds एक्सटेंशन आवश्यक नहीं है, हालांकि। इसके अलावा, बहुत कम स्थितियां हैं जब इस तरह की समानता वास्तव में उपयोगी होगी, क्योंकि मुझे बहुलक बाधाओं को c1, c2 से Bla के रूप में गुजरने का व्यावहारिक तरीका नहीं दिख रहा है, इसलिए बाधा समानता प्रत्येक मामले में एक ट्यूटोलॉजी होगी (Show ~ Show यहां):

{-# LANGUAGE ConstraintKinds, TypeFamilies #-} 

type Bla c1 c2 a = (c1 a, c2 a, c1 ~ c2) 

foo :: Bla Show Show a => a -> IO() 
foo = print 

main = foo "Bla" 

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^