मेरे पास ऐसे कार्यों का एक समूह है जो वेक्टरों पर काम करते हैं, यानी टाइप-लागू लंबाई के साथ सूचियां।पैरामीटरयुक्त प्रकार समानार्थी शब्द
मैं तो मैं बस लिख सकते हैं foo :: NList v Integer => ...
(सरलीकृत) वर्ग
foo :: (Fold Integer v, Map Integer Integer v v, ...) => ...
मैं एक नया वर्ग NList
की घोषणा कर रहा हूँ लेखन लिखने के लिए मेरी प्रकार आसान बनाने के लिए कोशिश कर रहा हूँ, यानी बजाय
class (Fold (v i) i
, Map i i (v i) (v i)
, Map i (Maybe i) (v i) (v (Maybe i))
) => NList v i
आप देख सकते हैं, मैं "वेक्टर" प्रकार ("आइटम" प्रकार से अलग रखना है यानी: इस तरह दिखता हैi
से अलग) ताकि मैं Map
जैसी चीजें Maybe
वेक्टर पर कर सकूं।
ऐसे में, v
में * -> *
, और i
दयालु *
होना चाहिए।
हालांकि, जब मैं बहुत तरह वैक्टर के साथ यह दृष्टांत का प्रयास करें:
instance NList Vec2 Integer
instance NList Vec3 Integer
...
मैं निम्नलिखित त्रुटि मिलती है:
Type synonym `Vec2' should have 1 argument, but has been given none
In the instance declaration for `NList Vec2 Integer'
अब, मैं बहुत टाइप स्तर के प्रोग्रामिंग नया हूँ, और मैं समझता हूं कि मैं इसे बहुत पिछड़े फैशन में कर रहा हूं। क्या इस तरह के एक प्रकार के पर्याय को तुरंत चालू करना संभव है? क्या किसी भी प्रकार के जादूगरों के पास मेरे लक्ष्यों को पूरा करने के बेहतर तरीकों के लिए सुझाव हैं?
बहुत अच्छा, धन्यवाद। एक चीज जो मुझे नहीं मिलती वह आखिरी उदाहरण है। टिल्ड ऑपरेटर के साथ क्या चल रहा है? – So8res
यह एक [समानता बाधा] है (http://www.haskell.org/ghc/docs/7.4.1/html/users_guide/equality-constraints.html)। यदि आपके पास गुंजाइश में 'संख्या' बाधा है, तो आप अंकगणित ऑपरेटरों का उपयोग 'ए' के मानों पर कर सकते हैं; यदि आपके पास दायरे में '(ए ~ बी) 'बाधा है, तो आप' ए' मानों का उपयोग' बी' मानों और इसके विपरीत के रूप में कर सकते हैं। असल में, आप '(एन ~ जेड) => आर' पढ़ सकते हैं "मुझे साबित करें कि' n' 'Z' है, और मैं आपको' आर' 'दूंगा। – ehird