इस कार्यक्रम के उत्पादन मैं उम्मीद जब पाठ का कोई इनपुट फ़ाइल \ N द्वारा सीमांकित दिया पैदा करता है:withFile बनाम OpenFile
import System.IO
main :: IO()
main = do h <- openFile "test.txt" ReadMode
xs <- getlines h
sequence_ $ map putStrLn xs
getlines :: Handle -> IO [String]
getlines h = hGetContents h >>= return . lines
OpenFile के लिए withFile प्रतिस्थापन और थोड़ा उलटफेर
import System.IO
main :: IO()
main = do xs <- withFile "test.txt" ReadMode getlines
sequence_ $ map putStrLn xs
getlines :: Handle -> IO [String]
getlines h = hGetContents h >>= return . lines
मेरे द्वारा प्रबंधित तक बिल्कुल कोई आउटपुट प्राप्त करने के लिए। मैं उलझन में हूं।
संपादित करें: अब और नहीं फंस गया: विचारशील और विचार-विमर्श करने वाले उत्तरों के लिए एक और सभी के लिए धन्यवाद। मैंने प्रलेखन में थोड़ा और पढ़ा और सीखा कि के साथ फ़ाइलब्रैकेट के आंशिक अनुप्रयोग के रूप में समझा जा सकता है।
import System.IO
main :: IO()
main = withFile "test.txt" ReadMode $ \h -> getlines h >>= mapM_ putStrLn
getlines :: Handle -> IO [String]
getlines h = lines `fmap` hGetContents h
मुझे उत्तर देने के लिए अप्रासंगिक युक्ति आपको पकड़ने के लिए: 'sequence_। मानचित्र 'को' mapM_' के रूप में आसानी से लिखा जा सकता है। – So8res
एक और अप्रासंगिक युक्ति: 'foo >> = वापसी।बार' बेहतर लिखा है 'एफएमएपी बार फू'; मैं विशेष रूप से इनफिक्स एफएमएपी समानार्थी का आनंद लेता हूं: 'बार <$> foo' (' आयात नियंत्रण। अनुप्रयोग 'की आवश्यकता है) –