IO 定義你的程式主要操作

要使 Haskell 程式可執行,你必須提供具有 IO () 型別的 main 函式的檔案

main::IO ()
main = putStrLn "Hello world!"

編譯 Haskell 時,它會檢查 IO 資料並將其轉換為可執行檔案。當我們執行這個程式時,它將列印 Hello world!

如果你的 IO a 型別的值不是 main,他們將不會做任何事情。

other::IO ()
other = putStrLn "I won't get printed"

main::IO ()
main = putStrLn "Hello world!"

編譯該程式並執行它將與上一個示例具有相同的效果。other 中的程式碼被忽略。

為了使 other 中的程式碼具有執行時效果,你必須將其組合main。沒有最終組成 mainIO 值將具有任何執行時效果。要按順序組合兩個 IO 值,你可以使用 do-notation:

other::IO ()
other = putStrLn "I will get printed... but only at the point where I'm composed into main"

main::IO ()
main = do 
  putStrLn "Hello world!"
  other

編譯並執行程式時,它會輸出

Hello world!
I will get printed... but only at the point where I'm composed into main

請注意,操作的順序由 other 如何組成 main 而不是定義順序來描述。