为什么我的 Haskell 函数参数必须是 Bool 类型?
Why is my Haskell function argument required to be of type Bool?
我在 Haskell 中有一个函数定义如下:
f2 x y = if x then x else y
当试图确定 y
的类型时,我假设它可以是任何有效的 Haskell 类型,因为评估 if 部分不需要它。但是,使用
检查类型签名
:type f2
产量
f2 :: Bool -> Bool -> Bool
在这种情况下,为什么 y
参数需要是 Bool
类型?
Haskell 值有类型。每个值都有一个类型。一种。不能同时是两种不同的类型
因此,由于 x
作为 if
的结果返回,整个 if ... then ... else ...
表达式的类型与 x
的相同类型。
一个if
表达式有一个类型。因此,它的结果表达式和替代表达式必须具有相同的类型,因为它们中的任何一个都可以返回,具体取决于测试的值。因此两者必须具有相同的类型。
由于测试中也用到了x
,所以一定是Bool
。那么一定是 y
.
我在 Haskell 中有一个函数定义如下:
f2 x y = if x then x else y
当试图确定 y
的类型时,我假设它可以是任何有效的 Haskell 类型,因为评估 if 部分不需要它。但是,使用
:type f2
产量
f2 :: Bool -> Bool -> Bool
在这种情况下,为什么 y
参数需要是 Bool
类型?
Haskell 值有类型。每个值都有一个类型。一种。不能同时是两种不同的类型
因此,由于 x
作为 if
的结果返回,整个 if ... then ... else ...
表达式的类型与 x
的相同类型。
一个if
表达式有一个类型。因此,它的结果表达式和替代表达式必须具有相同的类型,因为它们中的任何一个都可以返回,具体取决于测试的值。因此两者必须具有相同的类型。
由于测试中也用到了x
,所以一定是Bool
。那么一定是 y
.