जब दुभाषिया में काम कर रहा है, यह अक्सर सुविधाजनक उदाहरण के लिए एक नाम करने के लिए एक समारोह बाध्य करने के लिए, है:मैं किसी अन्य नाम पर फ़ंक्शन कब बांध सकता हूं?
ghci> let f = (+1)
ghci> f 1
2
इस समारोह (+1)
के नाम f
उपनाम। सरल।
हालांकि, यह हमेशा काम नहीं करता है। एक उदाहरण मैंने पाया है कि Data.List
मॉड्यूल से nub
को उपनाम करने का प्रयास करने का कारण बन रहा है। उदाहरण के लिए,
ghci> :m Data.List
ghci> nub [1,2,2,3,3,3]
[1,2,3]
ghci> let f = nub
ghci> f [1,2,2,3,3,3]
<interactive>:1:14:
No instance for (Num())
arising from the literal `3'
Possible fix: add an instance declaration for (Num())
In the expression: 3
In the first argument of `f', namely `[1, 2, 2, 3, ....]'
In the expression: f [1, 2, 2, 3, ....]
हालांकि, अगर मैं स्पष्ट रूप से तर्क x
तो यह त्रुटि के बिना काम करता है राज्य:
ghci> let f x = nub x
ghci> f [1,2,2,3,3,3]
[1,2,3]
किसी को भी इस व्यवहार की व्याख्या कर सकते हैं?
[यह प्रश्न और उसका उत्तर] देखें (http://stackoverflow.com/questions/4575040/what-is-xnomonomorphismrestriction)। – gspr
धन्यवाद। यदि आपने इसे उत्तर के रूप में पोस्ट किया है (संभवतः थोड़ा विस्तारित) तो मैं इसे स्वीकार करूंगा। –
नहीं, क्रेडिट जहां क्रेडिट का कारण है (यानी मैं जिस उत्तर से जुड़ा हूं)। :-) – gspr