2012-03-19 9 views
14

एक हास्केल ट्यूटोरियल मैं निम्नलिखित कोड भर में भाग गया में:बिना उपयोग किए जाने का दायरा क्या है?

do [...] 
    let atom = [first] ++ rest 
    return $ case atom of 

नोट let अभिव्यक्ति एक in ब्लॉक नहीं है। let अभिव्यक्ति का दायरा क्या है? अगली पंक्ति?

+1

'[प्रथम] ++ rest' काफी अजीब है, भी,' पहले किया जाना चाहिए: भी rest' – configurator

उत्तर

15

सीधे शब्दों में कहें, यह "जहां यह do के अंत तक लिखा है से" स्कोप है ।

ध्यान दें कि do कथन के भीतर, let को अलग-अलग संभाला जाता है।

http://www.haskell.org/haskellwiki/Monads_as_computation#Do_notation के अनुसार, यह इस प्रकार व्याख्या की है:

do { let <decls> ; <stmts> } 
    = let <decls> in do { <stmts> } 
8

दायरा do ब्लॉक का शेष है।

See §3.14 of the Haskell Report (विशेष रूप से, अनुवाद ब्लॉक में चौथा मामला)। (हाँ, यह, do ब्लॉकों के बारे में खंड है, क्योंकि in बिना let, एक do ब्लॉक के अंदर ही मान्य है के रूप में Porges बताते हैं।)

+2

ध्यान दें कि '' बिना let' इन 'केवल' डू 'ब्लॉक के अंदर मान्य है। – porges

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