我在 Haskell 中有一個函式定義如下:
f2 x y = if x then x else y
在嘗試確定 的型別時y,我認為它可以是任何有效的 Haskell 型別,因為評估 if 部分不需要它。但是,檢查型別簽名
:type f2
產量
f2 :: Bool -> Bool -> Bool
為什么在這種情況下y引數需要是型別的Bool?
uj5u.com熱心網友回復:
Haskell 值有型別。每個值都有一個型別。一種。不能同時是兩種不同的型別。
因此,由于x作為if's consequent的結果回傳,整個if ... then ... else ...運算式x的型別與's 的型別相同。
if運算式有一個型別。因此,其結果運算式和替代運算式都必須具有相同的型別,因為它們中的任何一個都可以回傳,具體取決于測驗的值。因此兩者必須具有相同的型別。
由于x也在測驗中使用,所以它必須是Bool. 那么必須如此y。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/363868.html
下一篇:使用遞回修改串列
