haskell - 在数据类型的每个值上实例化类型类

标签 haskell typeclass data-kinds

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

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/

相关文章:

haskell - .. 在哪里定义?

scala - 类型类中的多个类型参数

haskell - 我是否可以禁止一个特定的数据构造函数位于另一个数据构造函数中,而两者都给出相同的类型?

haskell - 不寻常的种类和数据构造函数

haskell - FreeT生成的解释器monad转换器的MonadFix实例?

haskell - 在设计数据结构时,何时公开数据类型的构造函数?

haskell - Backwards 是否承认 Monad 实例?

haskell - Vscode Haskell 语法突出显示颜色突然不起作用或丢失

haskell - 是否有任何语言扩展或 Haskell 的语言后代,有利于表现力,特别是在实例处理方面?

haskell - 将 GADT 与 DataKinds 用于函数中的类型级数据构造函数约束