यहाँ फिबोनैकी संख्या की गणना करने के लिए एक सरल समारोह है:एक पॉलिमॉर्फिक प्रकार हस्ताक्षर प्रदर्शन को कम क्यों करता है?
fib :: [Int]
fib = 1 : 1 : zipWith (+) fib (tail fib)
GHCi में मैं जल्दी से श्रृंखला की गणना कर सकते हैं। वास्तव में, कुछ प्रयोगों से पता चलता है कि गणना लगभग रैखिक समय में चलती है।
ghci> last $ take 100000 fib
354224848179261915075 -- takes under a second
अगर मैं प्रकार हस्ताक्षर बदलने के बजाय बहुरूपी होने के लिए:
fib :: Num a => [a]
fib = 1 : 1 : zipWith (+) fib (tail fib)
फिर एल्गोरिथ्म धीमी हो जाती है। वास्तव में, ऐसा लगता है कि यह अब घातीय समय में चलता है!
क्या पॉलिमॉर्फिक प्रकार हस्ताक्षर पर स्विच करना मतलब है कि सूची प्रत्येक चरण में पूरी तरह से पुनः संयोजित की जा रही है? यदि हां, तो क्यों?
संभावित डुप्लिकेट [क्या एक मूल्य जिसमें वर्ग की बाधाओं वाला एक प्रकार है, वास्तव में रन टाइम पर एक फ़ंक्शन होगा?] (Http://stackoverflow.com/questions/7659845/will-a-value-that-has-a -प्रकार-साथ-वर्ग-बाधाओं-वास्तव में होने वाली एक समारोह-एट-आरयू) –