मैं खिलौना (भौतिकी) वेक्टर लाइब्रेरी लिखने की प्रक्रिया में हूं और जीएचसी के साथ समस्याएं हैं जिनके कार्यों में Integer
एस उनके प्रकार में होना चाहिए। मैं वैक्टर वैक्टर, साथ ही scalars (बस *
का प्रयोग करके) गुणा करने के लिए चाहते हैं, और यह है, जबकि सिर्फ Vector
उदाहरण Num
होने मैं अब एक तरह से त्रुटियों हो रही द्वारा ही संभव था:हास्केल एक विशिष्ट प्रकार (स्पष्ट रूप से) असंगत रूप से क्यों अनुमान लगाएगा?
Couldn't match expected type `Integer' with actual type `Double'
के साथ चारों ओर खेलने के बाद कोड आदेश समस्या नीचे पिन करने में मैं इस के लिए नीचे यह मिल गया है:
data V a = V a a a deriving (Show, Eq, Functor)
scale a (V i j k) = V (a*i) (a*j) (a*k)
(<.>) = scale
अब अगर हम GHCi पूछने पर हम पाते हैं कि किस प्रकार ये हैं:
>:t scale
scale :: Num a => a -> V a -> V a
>:t (<.>)
(<.>) :: Integer -> V Integer -> V Integer
जहां हम निश्चित रूप से <.>
नहीं चाहते हैं केवल Integer
एस पर अभिनय करें। हालांकि यह <.>
के लिए एक प्रकार हस्ताक्षर सहित यहां ठीक करने योग्य है, मैं जानना चाहता हूं कि वास्तव में क्या चल रहा है।
संभावित डुप्लिकेट [मोनोमोर्फिज्म प्रतिबंध क्या है?] (Http://stackoverflow.com/questions/32496864/what-is-the-monomorphism-restriction) – Bakuriu