2010-12-16 53 views
8

我有以下类型类该款车型类似SQL的查询优化:哈斯克尔重叠的情况和类型的功能

class OptimizableQuery q where 
    type Optimized q :: * 
    optimize :: q -> Optimized q 

instance Query q => OptimizableQuery q where 
    type Optimized q = q 
    optimize q = q 

instance (Query q, OptimizableQuery q) => OptimizableQuery (Select (Select q p) p) where 
    type Optimized (Select (Select q p) p) = Select (Optimized q) p 
    optimize (Select (Select q _) p) = Select (optimize q) p 

的问题是,我得到了错误的优化型功能“冲突的家庭背景声明”。为什么是这样的,我该如何解决它?真的很高兴有一个“后备实例”,而不是必须用尽所有情况(可能很多)...

回答

7

与类型系列重叠实例是非法的。有关详细信息,请参见GHC manual,“重叠类型同义词实例”。

原因是根据可用实例,对于类型函数应用程序有两种不同的可能结果会导致不稳定。

+0

我该如何解决这个问题? – 2010-12-17 08:11:36

+0

除了耗尽所有情况以外,我无法想到任何解决方法。抱歉! – 2010-12-17 10:00:57