为什么将我的函数用作另一个函数的参数会导致错误?哈斯克尔

时间:2014-12-21 21:34:01

标签: haskell currying higher-order-functions

我有两个功能:

f1 :: Bool -> Int
f1 x 
    | x == True     = 5
    | x == False    = 10

f2 :: Int -> Int
f2 x = x * 2

由于f1的输出是f2的正确输入,为什么

f2 f1 True

导致错误?

我不知道要标记什么,因此标记可能不合适。

1 个答案:

答案 0 :(得分:4)

功能应用程序是左关联的,因此f2 f1 True(f2 f1) True相同,而不是f2 (f1 True)。由于(f2 f1) True的参数类型为f2,但Int的类型为f1,而非Bool -> Int,所以Int显然是错误输入的。