2010-08-04 10 views
7

मैं शैली के कोड का एक बहुत कुछ है: "एक्स < - ..." के संयोजन मेरेहास्केल में, "मामले" और ">> =" संयोजन

do 
    x <- getSomething 
    case x of 
    this -> ... 
    that -> ... 
    other -> ... 

किसी भी तरह से और "मामले एक चर के लिए आवश्यकता को खत्म करने के लिए लाइनों के एक्स?

+4

मेरी इच्छा है कि 'केस' '\ x -> केस x के लिए शॉर्टेंड था। – dave4420

उत्तर

6

x पाइप करने के लिए आप बाइंड ऑपरेटर >>= का उपयोग कर सकते हैं।

import System.Environment (getArgs) 

main :: IO() 
main = getArgs >>= process 
    where process ["xxx"] = putStrLn "You entered xxx" 
      process ["yyy"] = putStrLn "You entered yyy" 
      process _  = putStrLn "Error" 
0

मैं के रूप में

foo "this" = return 2 
foo "that" = return 3 

main = foo =<< getSomething 

इस विधि की अच्छी बात यह है कि अगर foo शुद्ध है तो यह

main = foo <$> getSomething 

तो कोड को कुछ हद तक अलग-अलग के लिए एक ही आकार को बरकरार रखे हुए हो जाता है ऐसा करने परिस्थितियों।

0

आप कुछ अत्यंत के करीब चाहते हैं:

getSomething >>= caseOf 
    this -> expr1 
    that -> expr2 
    other -> expr3 

तो मुझे लगता है कि तुम सिर्फ भाग्य से बाहर हो - हास्केल में ऐसी कोई वाक्य रचना होती है। लेकिन पता है कि आप अकेले नहीं हैं।

case<- getSomething of 
    Nothing -> expr1 
    Just x -> expr2 x 

वह एक "केस-से" भाषा परिभाषा बयान के रूप में यह करने के लिए संदर्भित करता है: मार्क जोन्स वाक्य रचना के साथ monadic मामले का एक तरह शामिल करने के लिए आदत भाषा में परिभाषित किया।

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