Oop 如何使用类型类实现持久性、内省、标识、打印、,

Oop 如何使用类型类实现持久性、内省、标识、打印、,,oop,types,programming-languages,language-design,theory,Oop,Types,Programming Languages,Language Design,Theory,在关于的讨论中,他认为这是我们今天使用的包罗万象的框架的一个很好的替代方案 他似乎对打字课最感兴趣: 我们可以使用类型类之类的结构来定义特性(比如持久性、内省、, 标识,打印)与类和 接口 我对类型类作为“类型的类型”略知一二,但我不确定它们将如何应用于前面提到的问题:持久性、打印 有什么想法吗?我最好的猜测是通过默认方法重用代码,通过将类型类实现从类型本身分离出来进行正交定义 基本上,在定义类型类时,可以为方法定义默认实现。例如,Haskell中的Eq(equality)类将/=(不相等)定义

在关于的讨论中,他认为这是我们今天使用的包罗万象的框架的一个很好的替代方案

他似乎对打字课最感兴趣:

我们可以使用类型类之类的结构来定义特性(比如持久性、内省、, 标识,打印)与类和 接口

我对类型类作为“类型的类型”略知一二,但我不确定它们将如何应用于前面提到的问题:持久性、打印


有什么想法吗?

我最好的猜测是通过默认方法重用代码,通过将类型类实现从类型本身分离出来进行正交定义

基本上,在定义类型类时,可以为方法定义默认实现。例如,Haskell中的
Eq
(equality)类将
/=
(不相等)定义为
非(x==y)
,默认情况下,该方法适用于类型类的所有实现。以类似的方式,在其他语言中,您可以定义一个类型类,其中除了一个或两个方法之外,所有持久性代码都是编写的(
Save
Load
)。或者,在一种具有良好反射能力的语言中,您可以提前定义所有持久性方法。实际上,它有点类似于多重继承

现在,另一件事是,您不必在定义类型的同一位置将类型类附加到您的类型,您实际上可以稍后在不同的位置执行此操作。这允许持久性逻辑与原始类型很好地分离

我最喜欢的一篇论文中有一些很好的例子,说明在OOP语言中这是什么样子。它们对默认实现和追溯接口实现的描述基本上与我刚才描述的语言特性相同


免责声明:我并不真正了解Haskell,所以我可能在某些地方出错了

请查看JavaAOP(面向方面的程序员)。切入点似乎类似于类型类。有趣的是,我没有意识到类型类实际上可以实现方法。