给定以下数据类型:
sealed trait Expression
final case class Add(a: Expression, b: Expression) extends Expression
final case class Block(statements: List[Statement], result: Expression) extends Expression
sealed trait Statement
final case class ExpressionStatement(expression: Expression) extends Statement
final case class Assignment(variable: String, expression: Expression) extends Statement
我的第一步是执行以下操作:
sealed trait ExpressionF[E, S]
final case class AddF[E, S](a: E, b: E) extends ExpressionF[E, S]
final case class BlockF[E, S](statements: List[S], result: E) extends ExpressionF[E, S]
sealed trait StatementF[E, S]
final case class ExpressionStatementF(expression: E) extends StatementF[E, S]
final case class Print(expression: E) extends StatementF[E, S]
但我不确定如何将 Fix 与两个类型变量一起使用。
如何表示这些类型,以便可以使用 droste 或 matryoshka/Fix 使用递归方案?