Вы не можете этого сделать. Причина в том, что Haskell не должен выполнять сокращения лямбда-термина. Haskell оценивает программы (лямбда-термины) на значения. Одна из возможностей, как это сделать, - действительно выполнить сокращения лямбда-термина, но это было бы весьма неэффективно. Поэтому компиляторы Haskell используют множество сложных методов, таких как сокращение графика. Поэтому вы не можете наблюдать различия, такие как (\x -> x) y
vs y
во время процесса оценки - фактических лямбда-терминов не наблюдается.
Обратите внимание, что GHC имеет NFData
класс типа, который позволяет оценить условия их нормальных форм с использованием rnf
- г -educe к н -ormal е -orm (но только продуктов или побочных продуктов, он по-прежнему Безразлично» t оценивать термины под лямбдами, как отметил @JakeMcArthur). Однако это не дает вам доступа к нормальной форме, выраженной в виде лямбда-термина. Он только сообщает Haskell выполнить эту оценку во время вычисления.
См. Здесь: http://stackoverflow.com/questions/15627849/turn-off-lazy-evaluation-in-haskell –
Я хотел бы указать, что второе предложение делает этот вопрос более конкретным, чем тот, который, предположительно, является дубликатом. – kosmikus
Это не дубликат предлагаемого вопроса. Это касается оценки в лямбда. – augustss