haskell - 类型族实例的类型类约束

标签 haskell types typeclass type-families

是否可以指定一个类型族的所有实例都必须满足的类型类约束?

例如,给定以下声明,我如何确保所有实例也是 Eq 的实例? :
data family Channel c :: *
非常感谢,

迈克尔

最佳答案

这是你想要的?

{-# LANGUAGE FlexibleContexts, TypeFamilies, FlexibleInstances #-}

-- Data family inside a class so that we can add an extra Eq constraint
class Eq (Channel c) => MyClass c where
    data Channel c :: *

-- A simple toy instance
instance MyClass Int where
    data Channel Int = CI Int deriving Eq

-- A more complex instance with separate Eq instance
instance MyClass Char where
    data Channel Char = CC Char

instance Eq (Channel Char) where
   (CC x) == (CC y) = x == y

关于haskell - 类型族实例的类型类约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25219162/

相关文章:

haskell - 有没有更干净、优雅的 Haskell 方式来编写这个 LCM 函数?

'selective' map 的 Haskell 习语

parsing - 跳过一切直到成功解析

c# - 为什么 'typeof(string).FullName' 给出的是 'System.String' 而不是 'string' ?

exception - 为什么Haskell中的()是Enum类型却没有实现succ函数

typeclass - 使用接口(interface)在 Type 上定义部分函数

haskell - 为什么 Haskell 采用一个参数

C# 自定义数据类型 "choices"

java - 具有多种有界类型的逗号或&符号?

haskell - Rust 中具有超特征的有界特征参数