在论文Streams à la carte: Extensible Pipelines with
Object Algebras
Biboudis 等人。概述使用对象代数“模拟类型构造器多态性”的方法。
我正在尝试使用此方法在 F# 中实现一个高阶示例,类似于 中描述的示例,Typed Tagless Final Interpreters
并具有以下内容:
type App<'f,'a> = interface end
type ExprSYM<'f,'a> =
abstract litInt: int -> App<'f,int>
abstract litBool : bool -> App<'f,bool>
abstract add : App<'f,int> -> App<'f,int> -> App<'f,int>
abstract gt : App<'f,int> -> App<'f,int> -> App<'f,bool>
abstract conj : App<'f,bool> -> App<'f,bool> -> App<'f,bool>
相关部分Brand Freshness
描述了在类型构造函数中嵌套类。我对 F# 的翻译如下:
type Eval<'a> =
static member t = new obj()
static member prj (app : App<Eval.t,'a>) = app :> Eval<'a>
inherit App<Eval.t,'a>
但是,我得到了错误The type 't' is not defined
。
在 F# 中写这个的正确方法是什么?