Tagless final:如何在运行时创建值?

时间:2017-11-24 01:55:14

标签: functional-programming abstract-syntax-tree

普通"初始" AST的表示涉及构建具有和类型的树。我对无标记最终方法的理解是,它涉及将AST表示为一个函数,它接受一组回调(通过类型类隐式或显式地作为记录),调用与所表示的AST相对应的函数,并返回结果

我见过的所有示例都对此功能进行了硬编码。但通常,您希望在运行时生成AST,例如作为解析器的输出。通过初始表示,这是微不足道的,但我不清楚如何在无标签的最终方法中处理这个问题。这是怎么做到的?

我唯一能想到的是通过组合对应于树的每一层的部分函数来构建函数,但这似乎是非常低效的并且它需要更高级别的类型。这真的是答案吗?

0 个答案:

没有答案