Prelude> mapM putStrLn ["a", "b"]
a
b
[(),()]
Prelude> mapM_ putStrLn ["a", "b"]
a
b
最初のバージョンが3番目の行を表示し、2番目のバージョンが表示しない理由と、3番目の行はどこから来ているのか。私はそれを期待していません。
バージョンをスタンドアロンプログラムに入れ、mapM
それをでコンパイルしてghc
実行すると、3行目も取得されません。
$ cat demo.hs
main = mapM putStrLn [ "a", "b" ]
$ ghc demo.hs
$ ./demo
a
b
$
[(),()]
に表示されるのは、呼び出しghci
の戻り値にすぎません。入力したすべての式の値が自動的に表示されます。(これが、Read-Evaluate-Print Loop、またはREPLと呼ばれる理由です。「印刷」部分がここに表示されます。)mapM
ghci
ghci
すべての呼び出しmapM
の戻り値を含むリストを作成している間(リスト内の要素ごとに1つ取得します)、 それらの戻り値を破棄して、表示しなくてもよい戻り値を返します。したがって、その場合から余分な行は表示されません。putStrLn
()
mapM_
IO ()
ghci
ghci