2010-12-16 49 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