2011-12-28 29 views
8

जब दुभाषिया में काम कर रहा है, यह अक्सर सुविधाजनक उदाहरण के लिए एक नाम करने के लिए एक समारोह बाध्य करने के लिए, है:मैं किसी अन्य नाम पर फ़ंक्शन कब बांध सकता हूं?

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] 

किसी को भी इस व्यवहार की व्याख्या कर सकते हैं?

+7

[यह प्रश्न और उसका उत्तर] देखें (http://stackoverflow.com/questions/4575040/what-is-xnomonomorphismrestriction)। – gspr

+0

धन्यवाद। यदि आपने इसे उत्तर के रूप में पोस्ट किया है (संभवतः थोड़ा विस्तारित) तो मैं इसे स्वीकार करूंगा। –

+1

नहीं, क्रेडिट जहां क्रेडिट का कारण है (यानी मैं जिस उत्तर से जुड़ा हूं)। :-) – gspr

उत्तर

3

वर्तमान Ghci संस्करणों में डिफ़ॉल्ट नियम टाइप करें कुछ हद तक अचूक हैं।

आप f के लिए एक प्रकार के हस्ताक्षर की आपूर्ति कर सकते हैं। या को अपने ~/.ghci फ़ाइल में जोड़ें जैसा कि पहले क्रिस द्वारा सलाह दी गई थी।

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

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