2014-12-02 86 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