मैं GHCi 7.0.3 का उपयोग कर रहा निम्नलिखित प्रोग्राम है जो प्रकार स्तरीय सूची को लागू करता है के साथ के रूप में काम नहीं करता है:XTypeOperators विस्तार pragma
{-# LANGUAGE TypeOperators #-}
data True
data False
-- List
data Nil
data Cons x xs
-- Type-level infix operator must begin with ':'
data x ::: xs
infixr 5 ::: -- set precedence level to 5 (tight)
यह कम्पाइल, लेकिन जब मैं के साथ यह परीक्षण:
:t (undefined :: True:::Nil)
(क्या undefined
के प्रकार है जब टाइप करने के लिए True:::Nil
डाली?) मैं इस त्रुटि मिलती है:
Illegal operator `:::' in type `True ::: Nil'
Use -XTypeOperators to allow operators in types
और वास्तव में, जब मैं ध्वज के साथ GHCi शुरू
-XTypeOperators
मैं उम्मीद परिणाम प्राप्त:
(undefined :: True ::: Nil) :: True ::: Nil
मेरा प्रश्न है:
{-# LANGUAGE TypeOperators #-}
: क्यों बराबर pragma काम नहीं करता है
संपादित करें: अगर प्रागम्स जीएचसीआई पर्यावरण में विस्तार नहीं करते हैं तो मेरे पास एक और पहेली है।
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FunctionalDependencies #-}
लेकिन एक बार संकलित, मैं GHCi में इसका इस्तेमाल कर सकते:
class And b1 b2 b | b1 b2 -> b where
andf :: b1 -> b2 -> b
-- truth table
instance And True True True where andf = undefined
instance And True False False where andf = undefined
instance And False True False where andf = undefined
instance And False False False where andf = undefined
यह निम्न pragmas आवश्यक: मैं इस कार्यक्रम की कोशिश की
*Main> :t andf (undefined::True) (undefined::False)
andf (undefined::True) (undefined::False) :: False
मैं सूची मामले में लगता है दुभाषिया टाइप-स्तरीय ऑपरेटर :::
के साथ अभिव्यक्ति को भी पार्स नहीं कर सका, जबकि मल्टीपार्मेटर कक्षाओं के मामले में कमांड लाइन पारदर्शी थी। लेकिन, इसके बारे में सोचने के लिए आओ, जीएचसीआई ने बहु-पैरामीटर वर्गों और कार्यात्मक निर्भरताओं का उपयोग करके प्रकार अनुमान लगाया, है ना? इस प्रकार की अनुमान जीएचसीआई में किया जाता है, और संकलित कोड में कुछ फ़ंक्शन को कॉल करके नहीं, है ना?
+1 .ghci फ़ाइल के लिए +1 –