Haskell Hero
Interaktivní učebnice pro začínající Haskellisty
|
Vstup a výstup II>>, >>=, return
V lekci Vstup a výstup I jsme si ukázali konstrukci vypis = do putStrLn "abc" putStrLn "def" putStrLn "ghi"čili vypiš "abc", pak vypiš "def" a nakonec "ghi". Tuto posloupnost příkazů můžeme zapsat pomocí operátoru >> . Vyhodnocení výrazu akce1 >> akce2 >> akce3 proběhne tak, že se nejdřív provede akce1 , následně akce2 a nakonec akce3 . V našem příkladu tedy:
putStrLn "abc" >> putStrLn "def" >> putStrLn "ghi"
V předchozím případě proběhly akce nezávisle na sobě. My ale budeme chtít například načíst hodnotu od uživatele a s ní pak dále pracovat. Čili předat vnitřní hodnotu jedné akce akci druhé. To provedeme operátorem getLine >>= putStrČili načti vstup od uživatele, tuto hodnotu předej dál a aplikuj na ni funkci putStr .
S předanou hodnotou můžeme udělat i více akcí. Stačí si uvědomit, že předchozí zápis je jen do pointfree převedený výraz getLine >>= \s -> putStr sNic nám tedy nebrání vypsat předanou hodnotu dvakrát za sebou: getLine >>= ( \s -> putStrLn s >> putStrLn s )Čili načti vstup, jehož hodnotu předej funkci, která svůj argument dvakrát vypíše.
Akce return (show (3 + 5)) >>= putStr |