क्या आप यहाँ देख रहे हैं क्योंकि एक आवश्यकता है कि कोई तर्क के साथ शीर्ष स्तर के घोषणाओं monomorphic हो की है। आप some discussion of the reasons for this on the Haskell wiki, और जीएचसी उपयोगकर्ता की मार्गदर्शिका में controlling this behavior के बारे में कुछ जानकारी पा सकते हैं।
चित्रण के रूप में, ध्यान दें कि len
दे रही है एक तर्क समस्या का समाधान होता:
len x = genericLength x
> :t len
len :: Num i => [b] -> i
तो यह एक प्रकार हस्ताक्षर दे रही है:
len :: (Num b) => [a] -> b
len = genericLength
और इसलिए monomorphism प्रतिबंध को बंद करने देता है:
{-# LANGUAGE NoMonomorphismRestriction #-}
import Data.List (genericLength)
len = genericLength
> :t len
len :: Num i => [b] -> i
इस विशिष्ट मामले में, मुझे लगता है कि आप भी एक अलग हो रहे हैं डिफ़ॉल्ट रूप से निर्दिष्ट करने के कारण एंटी प्रकार (एक कंपाइलर त्रुटि के बजाए) निर्दिष्ट करता है कि निर्दिष्ट प्रकार वर्गों को विशिष्ट प्रकारों के लिए डिफ़ॉल्ट होना चाहिए (इस मामले में, Num
Integer
पर डिफ़ॉल्ट है। आप fmap
साथ ही बात कर प्रयास करते हैं तो आप इस मिल:
> :r
[1 of 1] Compiling Main (MonoTest.hs, interpreted)
MonoTest.hs:4:5:
Ambiguous type variable `f0' in the constraint:
(Functor f0) arising from a use of `fmap'
Possible cause: the monomorphism restriction applied to the following:
f :: forall a b. (a -> b) -> f0 a -> f0 b
(bound at MonoTest.hs:4:1)
Probable fix: give these definition(s) an explicit type signature
or use -XNoMonomorphismRestriction
In the expression: fmap
In an equation for `f': f = fmap
Failed, modules loaded: none.
आप Haskell 98 Report में दोषी बारे में कुछ जानकारी पा सकते हैं। मैं यह भी उल्लेख करूंगा कि जीएचसी डिफ़ॉल्ट रूप से जीएचसीआई (और डिफ़ॉल्ट रूप से सक्षम है) के लिए उपयोग किया जाता है, जो कभी-कभी लोगों को भ्रमित करता है।
स्रोत
2011-06-12 05:00:04
मुझे उत्तर पोस्ट करने के लिए इसके बारे में पर्याप्त जानकारी नहीं है, लेकिन मुझे पूरा यकीन है कि इसमें [मोनोमोर्फिज्म प्रतिबंध] (http://www.haskell.org/haskellwiki/Monomorphism_restriction) के साथ कुछ करना है। यदि आप फ़ाइल के शीर्ष पर '{- # LANGUAGE NoMonomorphismRestriction # -} 'डालते हैं, तो यह वैसे ही व्यवहार करेगा जिसकी आप अपेक्षा करते हैं। –
+1 जेफरी को यह कहने के लिए कि यह मोनोमोर्फिज्म प्रतिबंध से संबंधित है। –