私は英語を話すのが苦手で申し訳ありません。
以下のコードを見てみましょう。
main = getChar
最初に main が評価され、その値は "getChar" ですが、コンパイラは "getChar" の値を認識していないため、コンパイラは "getChar" を評価して "getChar" の値を計算するため、getChar が実行されます。
実際に上記のコードをテストしたとき。"getChar が実行されます。
以下のコードを見てみましょう。
main = return (getChar, getChar)
最初にメインが評価され、その値は return (未定義、未定義) -> IO (未定義、未定義) であるため、プレリュードは IO (未定義、未定義) を評価して値を出力します。したがって、2 つの getChar のうちの 1 つが評価されます。
しかし、上記のコードをテストしたところ、2 つの getChar のいずれも評価されませんでした。2 つの getChar のいずれも評価されない理由がわかりません。