约束以查看一种类型是否"满足"另一种类型

Cli*_*ton 2 haskell type-constraints

有没有办法写一个约束:

C t1 t2 :: Constraint
Run Code Online (Sandbox Code Playgroud)

如果t2匹配,它"满足"(是正确的词)t1.

例如:

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
Run Code Online (Sandbox Code Playgroud)

dfe*_*uer 6

基本答案是否定的.Haskell的类型系统是预测性的:类型变量只能实例化为单一型.所以,如果你有

class C t u
Run Code Online (Sandbox Code Playgroud)

要么

type family C t u
Run Code Online (Sandbox Code Playgroud)

tu根本不能被实例化到要谈多态的类型.