haskell - 约束以查看一个类型是否为 "satisfies"另一个

标签 haskell type-constraints

有没有办法写约束:

C t1 t2 :: Constraint

如果 t2t1 匹配,它“满足”(这是正确的词)。

例如:

C (forall a. Num a => a -> a -> a) (forall a. Num a => a -> a -> a) -- good
C (forall a. Num a => a -> a -> a) (Int -> Int -> Int) -- good
C (forall a. Num a => a -> a -> a) (Bool -> Bool -> Bool) -- fails
C (Int -> Int -> Int) (forall a. Num a => a -> a -> a) -- fails

最佳答案

基本答案是否定的。 Haskell 的类型系统是谓词:类型变量只能实例化为单型。所以如果你有

class C t u

type family C t u

tu 根本不能被实例化为您想要谈论的多态类型。

关于haskell - 约束以查看一个类型是否为 "satisfies"另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42569784/

相关文章:

c# - 我什么时候应该或不应该使用泛型类型约束?

c# - 我可以定义一个只接受原始类型的方法吗?

haskell - 单子(monad)绑定(bind)的显式签名约束

delphi - 在类声明中使用自己的类作为类型参数约束

haskell - 一个覆盖如何显示新类型?

list - Haskell——检查列表的最后一项

haskell - 分区可以应用于 `a -> IO Bool` 吗?

perl - Moose 从单个参数构造对象

haskell - 随机选择和填充数据类型

haskell - Haskell 中的 TypeNats、ViewPatterns 和 arithmoi