打印出Haskell的评估(重写)步骤,用于教育/学习目的.可能吗?

jhe*_*dus 19 debugging evaluation haskell

我通过使用书中的一个例子来描述这个问题.

在Simon Thompson的书"HASKELL函数式编程工艺"(第82页)(见下图)中显示了评估步骤fac 4.

题:

是否可以使用某些工具或一些"Haskell调试器"来写出GHCi在评估其价值时使用的评估步骤fac 4

优选地,以人类可读的格式,用于教育和学习目的.

对每个评估步骤进行一些自动解释也是很好的,例如在重写步骤中使用了哪个等式.

我的主要目的是更深入地了解在运行简单的教育Haskell示例程序(如fac)时如何执行重写步骤.

有没有办法做到这一点 ?如果有,怎么样?

在此输入图像描述

在此输入图像描述

Sib*_*ibi 10

有一个名为Lambda bubble pop的工具,您可以在其中单击表达式以查看表达式如何减少.请注意,该工具仅支持整数和列表,但仍然是一个很好的教育工具.

实际工具的快照:

在此输入图像描述


Ber*_*rgi 10

是和否.我还没有看到一个工具,它在你的教科书中描述了这种逐行评估 - 主要是因为Haskell程序没有"重写"表达式.

但是,有一个工具可以逐步可视化Haskell的实际评估策略:ghc-vis.它不是仅仅评估结果并在控制台上显示它ghci,而是显示未评估结果的图形表示 - 您可以通过thunk强制评估它,直到您到达原始值和结构.

作为它可以做什么的一个例子,这里的评估直到无限斐波那契序列的第三个列表成员:

评估0,1和1,列表的其余部分是回顾列表本身部分的thunk http://felsin9.de/nnis/ghc-vis/fib1.svg

资料来源:项目网站的示例部分.你应该看看他们所有人!