有没有办法写一个约束:
C t1 t2 :: Constraint
如果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
答案 0 :(得分:6)
基本答案是否定的。 Haskell的类型系统是谓词:类型变量只能实例化为单一型。所以,如果你有
class C t u
或
type family C t u
t
和u
只是无法实例化为您想要谈论的多态类型。