2017-03-03 39 views
2

是否有寫約束的方式:約束,如果一個類型的「滿足」另一

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 
+2

我想你可能對[this]感興趣(https://hackage.haskell.org/package/constraints-0.9/docs/Data-Constraint-Forall.html)。 – Alec

回答

6

最基本的答案是否定的。 Haskell的類型系統是謂詞:一個類型變量只能被實例化爲一個monotype。所以,如果你有

class C t u 

type family C t u 

tu根本無法被實例化到要談多態的類型。

相關問題