मैं हास्केल सीख रहा हूं, और जब मैं कुछ परेशान हो गया तो मैं ghci में चारों ओर खेल रहा था।इस ghci सत्र में किस प्रकार के साथ चल रहा है?
सबसे पहले, एक सरल ऐड समारोह बनाने के लिए:
Prelude> let add x y = x + y
ध्यान दें कि यह ints के साथ काम करता है और तैरता:
Prelude> add 3 4
7
Prelude> add 2.5 1.3
3.8
अब एक लागू समारोह पैदा करते हैं। यह $
(लेकिन इन्फिक्स नहीं) के समान है। यह ऐड पर नो-सेशन की तरह काम करता है:
Prelude> let apply f x = f x
Prelude> apply add 3 4
7
Prelude> apply add 2.5 1.3
3.8
ठीक है, अब add'
जो एक ही है add'
के रूप में है, लेकिन apply
का उपयोग कर:
Prelude> let add' = apply add
Prelude> add' 3 4
7
Prelude> add' 2.5 1.3
<interactive>:1:9:
No instance for (Fractional Integer)
arising from the literal `1.3' at <interactive>:1:9-11
Possible fix: add an instance declaration for (Fractional Integer)
In the second argument of `add'', namely `1.3'
In the expression: add' 2.5 1.3
In the definition of `it': it = add' 2.5 1.3
वाट।
Prelude> :t add
add :: (Num a) => a -> a -> a
Prelude> :t apply add
apply add :: (Num t) => t -> t -> t
Prelude> :t add'
add' :: Integer -> Integer -> Integer
Prelude>
क्यों add'
apply add
तुलना में एक अलग प्रकार है:
यहाँ प्रकार के होते हैं?
क्या यह एक ghci विषमता है, या यह सामान्य रूप से हास्केल में सच है? (और मैं अंतर कैसे बता सकता हूं?)
जैसे ही मैं सुनता हूं "मैं ghci में खेल रहा था और मैंने कुछ अजीब देखा," मुझे लगता है कि "मोनोमोर्फिज्म प्रतिबंध" – amindfv