adapter API

adapter 包没有公开项。它是一个契约测试包:其白盒测试定义了一个小型的、下游风格的 AST,为其实现 @syntax.BindingSyntax,并检查泛型代换与泛型重写在一个不是 Term[T] 的 AST 上的行为与文档一致。

package "Luna-Flow/type_theory/adapter"

// Values

// Errors

// Types and methods

// Type aliases

// Traits

为适配你自己的 AST 而需实现的接口是 @syntax.BindingSyntax;随后你将获得的算法是 @syntax.generic_free_variables、@substitution.GenericSubstitution 和 @rewrite.generic_top_down_once。该契约在 adapter 设计中说明,adapter 教程则一步步构建一个适配器。

测试检查的内容

测试文件 src/adapter/poly_adapter_wbtest.mbt 使用一个包含四种节点的私有 AST:整数字面量(投影为 Opaque)、变量、n 元求和节点(投影为 Apply)以及作用域节点(投影为 Bind)。它检查

  • GenericSubstitution::apply_once 同时且一趟完成代换:将 {x↦y, y↦2}\{x \mapsto y,\ y \mapsto 2\} 作用于 x+yx + y 得到 y+2y + 2;
  • 代换保留其定义域之外的变量不变(部分求值);
  • generic_top_down_once 在某个参数内部找到可约式,通过 trait 构造器重建父节点,并报告路径 [ApplyArgument(0)]。