2016-03-31 13 views
1

に終わったタイプを開く:エルム - 擬似契約を考えると契約

condy: Int -> Int -> a -> b 
condy n m a b = 
    if n == m then a else b 

がどのように1は、aとbの型が同じであるが、任意のタイプにすることができ、正しくなるように上記の契約を定義することができますか?効果的に上記の各タイプのための余分な機能condyEffect[Type]の必要性を削除します。

condyPrime: Int -> Int -> Bool 
condy n m = 
    n == m 

condyEffectInt: Bool -> Int 
condyEffectInt bool k l = 
    if bool then k else l 

答えて

3

あなたcondy関数は次のようになります。型シグネチャに

condy: Int -> Int -> a -> a -> a 
condy n m a b = 
    if n == m then a else b 

部分a -> a -> aちょうどその第三氏は述べていますし、 condyの4番目のパラメータは同じ型でなければならず、型の注釈の最後のaは、戻り値が3番目と4番目のパラメータと同じ型である必要があると言います。

関連する問題