遅延I/O
3行のユーザ入力を、3行目、1行目、2行目の順に連結して出力するプログラム
code:Main.hs
module Main where
main :: IO ()
main = skewappend
skewappend :: IO ()
skewappend = do
a <- getLine
b <- getLine
c <- getLine
putStrLn (c ++ a ++ b)
このプログラムの動作は、以下のようになります。
code:ghci
>> :main
abc
123
DEF
DEFabc123
2〜4行目はユーザ入力のエコーバックで、5行目がプログラムの出力です。
このプログラムをApplicativeスタイルで書いてみると、
code:Main.hs
skewappend' :: IO ()
skewappend' = putStrLn =<< f <$> getLine <*> getLine <*> getLine