2011-01-12 22 views
8

आज सुबह बुरी खबरें, मैं लगातार सीखने के लिए लेक्सह (रास्ते में अच्छा दिखने वाला एप्लिकेशन) का प्रयास करने और उपयोग करने के लिए तैयार था।हैकेल लेक्सह हैलो-वर्ल्ड

मैं "हैलो वर्ल्ड" उदाहरण संकलित नहीं कर सका, मैंने leksah tutorial पढ़ा।

module Main (
main = putStrLn "Hello World"  
) where 

compilation-error: src\Main.hs:16:5: parse error on input = ' `

और

module Main (
) where 
main = putStrLn "Hello World" 

compilation-error: src\Main.hs:1:0: The main function मुख्य' मॉड्यूल द्वारा निर्यात नहीं है Main'

क्या आप मुझे सलाह कुछ और प्रयास करने के लिए चाहते हैं?

महत्वपूर्ण संपादित: अब Leksah एक फ़ाइल Main.hs, सीधे लोड पहली बार जब आप leksah लॉन्च करते हैं, कि एक पूरी तरह से functionnal नमस्ते विश्व मिनी परियोजना में शामिल है के साथ भेज दिया है। इसमें न्यूनतम इकाई परीक्षण काउंटर भाग भी है। शुरुआती :-)

उत्तर

15

पाठ मॉड्यूल का नाम के बाद एक निर्यात सूची है:

आप, साथ ही मुख्य निर्यात कर सकता है। इसका मतलब यह है कि आपको उस कार्यक्रम में सभी कार्यों को रखना होगा, जहां आप वहां निर्यात करना चाहते हैं। लेकिन इसके अलावा, आपको अपने मुख्य समारोह को कहीं भी परिभाषित करना होगा। इस प्रयास करें:

module Main (
    main 
) where 
main = putStrLn "Hello World" 

पुनश्च: आप भी वहाँ में paranthesis और कुछ भी हटा सकते हैं, अपने मॉड्यूल में कुछ भी की तुलना में निर्यात किया जा रहा है।

+0

कई thanx fuz! –

6

आपका दूसरा उदाहरण लगभग है, बस के पास () हटा दें। यह आपके मॉड्यूल के लिए आपकी निर्यात सूची है, जिसे आपने खाली कर दिया है (कोष्ठक के बीच में कुछ भी नहीं)। उस वजह से, main नहीं देखा गया है (क्योंकि यह निर्यात नहीं किया गया है)। paranthesis में

module Main (main) where 
+0

क्या सब कुछ निर्यात करने के लिए यह अच्छा अभ्यास है? –

+0

ठीक है, मैं यह सुनिश्चित नहीं कर सकता कि सबसे अच्छा अभ्यास क्या है, लेकिन: सामान्य रूप से, जब मैं एक उचित विचार करता हूं कि मैंने एक समेकित मॉड्यूल बनाया है तो मैं अपने निर्यात को सीमित करता हूं। अपने निर्यात को सीमित करना डेटाटाइप के लिए महत्वपूर्ण हो सकता है कि आप नहीं चाहते हैं कि लोगों को कार्यों के परिभाषित सेट के माध्यम से सीधे पहुंचें। – ScottWest

+1

और यदि आप किसी भी प्रकार का निर्यात नहीं करते हैं, तो संकलक बेहतर अनुकूलित कर सकते हैं। – fuz

6

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