在数据种类的每个值上实例化的类型类
Typeclass instantiated on every value of a data kind
是否可以指定数据种类的每个成员都满足类型class,从而隐含class 约束?例如
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
字典? -- 但我这一天看到了一些魔法。
不,你不能那样做。主要问题是,正如您提到的,那里没有任何东西可以给您一本字典。但另一个问题是,您声称 AB
中的每种类型都是 Foo
的实例是错误的。
type family Broken :: AB where
是否可以指定数据种类的每个成员都满足类型class,从而隐含class 约束?例如
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
字典? -- 但我这一天看到了一些魔法。
不,你不能那样做。主要问题是,正如您提到的,那里没有任何东西可以给您一本字典。但另一个问题是,您声称 AB
中的每种类型都是 Foo
的实例是错误的。
type family Broken :: AB where