2012-11-08 11 views

回答

17

如果你把mapM版本在一個獨立的程序,用ghc編譯並運行它,你不會從它那裏得到一個三線,或者:

$ cat demo.hs 
main = mapM putStrLn [ "a", "b" ] 
$ ghc demo.hs 
$ ./demo 
a 
b 
$ 

[(),()]ghci看到只是mapM調用的返回值; ghci會自動顯示您輸入的每個表達式的值。 (這就是爲什麼ghci被稱爲讀取 - 評估 - 打印循環,或REPL;「打印」的部分是你現在看到的是什麼。)

雖然mapM創建一個包含每個putStrLn調用的返回值的列表(所以你得到一個()爲列表中的每個元素),mapM_丟棄那些返回值並返回IO(),這ghci不會顯示。所以在這種情況下,您看不到ghci的多餘行。

+7

實際上,mapM_返回IO(),但ghci不打印()。 – augustss

+0

謝謝,更正。 –

相關問題