我有两个功能:
f1 :: Bool -> Int
f1 x
| x == True = 5
| x == False = 10
f2 :: Int -> Int
f2 x = x * 2
由于f1的输出是f2的正确输入,为什么
f2 f1 True
导致错误?
我不知道要标记什么,因此标记可能不合适。
答案 0 :(得分:4)
功能应用程序是左关联的,因此f2 f1 True
与(f2 f1) True
相同,而不是f2 (f1 True)
。由于(f2 f1) True
的参数类型为f2
,但Int
的类型为f1
,而非Bool -> Int
,所以Int
显然是错误输入的。