2010-06-27 7 views
36

मुझे ghci में एक त्रुटि मिलती है जब मैं एक नया प्रकार परिभाषित करने का प्रयास करता हूं:मैं ghci में एक नया प्रकार क्यों परिभाषित नहीं कर सकता?

Prelude> data Point = Pt Int Int 
<interactive>:1:0: parse error on input `data' 
Prelude> let data Point = Pt Int Int 
<interactive>:1:4: parse error on input `data'

मैं गलत क्या कर रहा हूं?

+0

संभावित डुप्लिकेट [क्या यह जीएचसीआई में नए एडीटी को परिभाषित करना संभव है] (http://stackoverflow.com/questions/3849716/is-it-possible-to-define-new-adts-in-ghci) – newacct

+4

@ newacct: मुझसे पूछे गए प्रश्न से पहले मैंने इस सवाल से पूछा था। – titaniumdecoy

+1

जैसा कि एलेक्सी रोमनोव नीचे कहते हैं आप ghc 7.4.1 और बाद में कर सकते हैं। – Davorak

उत्तर

28

titaniumdecoy, मैं GHCi रहस्य की इस तरह के साथ मदद की जा याद है जब मुझे पता चला अक्सर बनाया मुद्दा यह है कि तरह बातें लिख 'चलो वर्ग एक्स = एक्स * एक्स' के अंदर GHCi है IO इकाई में do अंकन के साथ let a = f b लेखन की तरह है - उदाहरण के इस तरह की में कहते हैं:

palindromize :: IO() 
palindromize = do 
    a <- readFile "foo.txt" 
    let b = reverse a 
    putStrLn (a ++ b) 

इसी प्रकार, जब आप जीएचसीआई में एक अभिव्यक्ति को फिर से परिभाषित करते हैं, यह do में निम्नलिखित करने जैसा है अंकन, जो पूरी तरह से वैध है:

makeMess :: IO() 
makeMess = do 
    a <- readFile "foo.txt" 
    let b = reverse a 
    putStrLn (a ++ b) 
    let b = a 
    putStrLn (a ++ b) 

कोई भी इस तरह के एक दृश्य के बीच में एक डेटा प्रकार घोषणा करेंगे, लेकिन यह मॉड्यूल में कहीं और करना होगा। मैंने अनुमान लगाया होगा कि कुछ प्रकार की सैद्धांतिक आपत्ति थी, लेकिन डॉन एस की टिप्पणी से पता चलता है कि कोई नहीं है।

12

ghci आपको इंटरैक्टिव इनपुट से प्रकारों को परिभाषित करने की अनुमति नहीं देता है - इसके बजाय, आपको फ़ाइल में अपनी टाइप परिभाषा और :load फ़ाइल को ghci में रखना होगा।

13

सिर्फ ऐतिहासिक संदर्भ के लिए, HBI Haskell interactive environment कमांड लाइन पर पूर्ण हास्केल के लिए अनुमति देता है, जिसमें प्रकार, कक्षाएं आदि शामिल हैं। कोई एक प्रायोरी GHCi इसी तरह काम नहीं कर सकता है, और उपयोगकर्ताओं GHC-एपीआई कि इस समर्थित करने के लिए एक सामने के अंत लिख सकता है ...

संबंधित मुद्दे