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

时间:2017-03-03 02:52:06

标签: 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

1 个答案:

答案 0 :(得分:6)

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

class C t u

type family C t u

tu只是无法实例化为您想要谈论的多态类型。