2014-12-02 62 views
0

我不能讓下面的編譯:類約束

class Typeable f => Foo f where 
    data Bar :: Typeable 

換句話說,我希望定義一個類Foo,其中有一個相關的類型必須是Typeable一個實例。

它看起來像我可以FunctionalDependencies定義同樣的事情:

class (Typeable b,Typeable f) => Foo f b | f -> b where 

那麼,如何可以做同樣的事情與TypeFamilies

+1

你的意思是聯營型,或相關數據?所不同的是非常基本的,而這個問題使許多更有意義,如果你的意思是相關聯的類型。也就是說,類定義中的「類型Bar ...」。與fundeps的比較僅適用於相關數據。 – Carl 2014-12-02 21:52:41

+0

實際要求是更象相關聯的數據,由於'Bar'會在同一時間作爲'Foo'實例來限定。 – 2014-12-02 22:08:12

回答

3

我沒有檢查,但我認爲這應該工作:

class (Typeable f, Typeable (Bar f)) => Foo f where data Bar f :: * 
+0

這工作得很好,謝謝。 – 2014-12-03 00:10:41