我很抱歉我英语不好。
让我们看看下面的代码。
main = getChar
首先,main会被求值,它的值是“getChar”,但是编译器不知道“getChar”的值,所以编译器会求值“getChar”来计算“getChar”的值,这样,getChar就会被执行。
实际上,当我测试上面的代码时。“getChar 被执行。
让我们看看下面的代码。
main = return (getChar, getChar)
首先,main 求值,它的值是 return (undefined, undefined) -> IO (undefined, undefined),所以 prelude 会求值 IO (undefined, undefined) 来打印值。因此将评估两个 getChar 之一。
但是,当我测试上面的代码时,两个 getChar 都没有被评估。我不明白为什么没有两个 getChar 被评估。