【发布时间】:2017-03-23 05:24:00
【问题描述】:
我目前有遵循这种模式的代码:
f1' x1 x2 .. xm1 = ...
f2' x1 x2 .. xm2 = ...
.
.
,
fn' x1 x2 .. xmn = ...
instance C D1 where
f1 = f1'
f2 = f2'
.
.
.
fn = fn'
instance C D2 where
f1 = f1'
f2 = f2'
.
.
.
fn = fn'
.
.
.
instance C DN where
f1 = f1'
f2 = f2'
.
.
.
fn = fn'
基本上,我有一个要为多种数据类型实现的类,但所有这些实现都是相同的。但是实例实现有很多重复的代码,对于m函数和n实例,我必须大致写O(m*n)行代码,我希望它更像O(m+n)。
有什么好的方法可以去掉这里的重复吗?我想 Template Haskell 可以解决问题,但如果已经存在处理这个问题的东西,我不想重新发明轮子。
【问题讨论】:
-
如果都一样,就不能只提供默认实现吗?
-
可悲的是,我不能这样做,我不控制班级(
C实际上是Enum在我的情况下)。 -
代替抽象的例子,你能添加你的两个类型以及你的函数吗?
-
我不知道有没有比 Template Haskell 更简单的东西。
-
有时在这种情况下,我将每个实例的所有定义放在一行中,以减轻视觉上的痛苦并更清楚地显示重复。
标签: haskell