3

是否可以指定数据种类的每个成员都满足类型类,从而隐含类约束?例如

data AB = A | B
class Foo (a :: AB) where get :: proxy a -> String
instance Foo A where get _ = "A"
instance Foo B where get _ = "B"

-- note lack of constraint here
get' :: proxy (a :: AB) -> String
get' = get

基本上a是一个AB,所以我们确定它有一个实例Foo。我觉得不太可能——从哪里得到Foo字典?- 但我在我的日子里看到了一些魔法。

4

1 回答 1

6

不,你不能那样做。主要问题是,正如您所提到的,没有什么可以给您一本字典。但另一个问题是,您声称每个类型AB都是的实例Foo是错误的。

type family Broken :: AB where
于 2016-12-13T23:04:58.327 回答