有没有办法写约束:
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
最佳答案
基本答案是否定的。 Haskell 的类型系统是谓词:类型变量只能实例化为单型。所以如果你有
class C t u
或
type family C t u
t
和 u
根本不能被实例化为您想要谈论的多态类型。
关于haskell - 约束以查看一个类型是否为 "satisfies"另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42569784/