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)
基本答案是否定的.Haskell的类型系统是预测性的:类型变量只能实例化为单一型.所以,如果你有
class C t u
Run Code Online (Sandbox Code Playgroud)
要么
type family C t u
Run Code Online (Sandbox Code Playgroud)
在t和u根本不能被实例化到要谈多态的类型.