注釈
まだまだ、Haskell 歴 5 日なので、多少間違っててても許してください。
do は
これを
main =
getChar >>= (\a -> (
getChar >>= (\b ->
putChar b)) >> (
putChar a))
これにしている
main = do
a <- getChar
b <- getChar
putChar b
putChar a
do の役割は
>>= や >> という関数を縦に並べ易くすること
モナドは
>>= や >> を定義するために存在する。いや。「定義する」じゃなくて、「定義を上書きする」ために存在する。