最後に出した例ですが、 module Main where main :: IO () main = getLine >>= putStrLn . reverse モナドで悟りをひらきたいのなら - 図でわかる(?)モナド さきほどのエントリの図が全部わかれば、以下のような図も書けますね。reverseをfmapで持ち上げて橋を架け、落ちているputStrの左端を>>=で吊るし上げます。この図でできるIO StringからIO ()への関数は、モナドの性質(≒可換性)から、ありがたいことに最初の図でできる関数と同じになります。 この図から、以下のコードが書けます。 module Main where main :: IO () main = fmap reverse getLine >>= putStrLn Haskellでは関数間の型があうようにコーディングをすることが多いと思いますが、