基于Oleg Kiselyov的以下文章:。 另请参见 本文并没有真正提出一种处理效果的新颖方法,而是以这个问题为起点来讨论如何将嵌入式DSL应用到这个问题上。 它声称单子界面不仅无用,甚至有害,因为支持它会减少可能的效果解释器的空间。 这用两个特定的解释器说明:对表达式进行静态分析而不评估它们(抽象解释),以及从表达式生成(可能更有效)代码。 本文使用MetaOCaml来实现这些想法。 我的目标是看如何使用枚举,参数化特征,扩展方法和登台(用于运行时代码生成)将此代码转换为惯用的Scala 3代码。 该项目是作为一个单一的编写的。