是否可以指定数据类型的每个成员都满足类型类,从而隐含类约束?例如
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
关于haskell - 在数据类型的每个值上实例化类型类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41130040/