Прошу прощения, что я нехорошо говорить по-английски.оценить «main = return (getChar, getChar)»
Посмотрим код ниже.
main = getChar
первого, основной будет оцениваться, и это значение «GetChar», но компилятор не знает значение «GetChar», поэтому компилятор будет оценивать «GetChar» вычислить значение «GetChar», и так, getChar будет выполнен.
Фактически, когда я проверил код выше. .. «GetChar выполняется
Давайте посмотрим код ниже
main = return (getChar, getChar)
Во-первых, основной оценке, это значение возврата (не определено, не определено) -> IO (не определено, не определено), поэтому прелюдия будет оценивать IO (undefined, undefined), чтобы напечатать значение, поэтому будет оценен один из двух getChar.
но, когда я проверил код выше, ни один из двух getChar не был оценен. Я не понимаю, почему ни один из двух getChar не является оценивается.
Кстати, где вы получили информацию о том, что результат main должен быть напечатан? Это не так. Так или иначе, он все равно отбрасывается. – Ingo
'return X' не выполняет эффекты' X'. Например, 'main = return getChar' ничего не сделает. – sdcvvc
Может ли кто-нибудь здесь предоставить версию этого кода в аппликативном стиле, что делает то, что хочет OP? – hugomg