我是Haskell的新手,在理解語言的一些概念時遇到了一些麻煩。haskell中表達式的類型
我有以下表現:
\f x → (f x,f 1)
而且從我的理解,我可以說:
起初,我真的不能說是因爲我什麼˚F沒有信息, 所以我說它可以是任何東西。
然後,從(FX)的應用判斷我可以說,它是類型的 功能A-> B,其中x ::一個
然後從應用判斷(F 1)I可以說一個是 整數類型,因此x是同一類型
然後,我真的不明白,爲什麼整個表達式的類型爲:
(Integer → b) → Integer → (b, b)
我有一點猜測,我會說:
(Integer → b)
是函數f的類型,所以它接收和整數並返回一個類型B
Integer
是x的類型
(b b)
是兩個函數的調用類型嗎?
有人可以指點我正確的方向嗎?謝謝
你明白了非常正確的。因爲在GHCi中,文字'1'默認爲'Integer',所以'\ f x - >(f x,f 1)'將被限制爲'(整數 - > b) - >整數 - >(b,b)''。因此推斷爲函數的'f'需要一個'Integer'。由於'x'在元組元素之一傳遞給'f',所以'x'必須是'Integer'。 '(b,b)'只是一個元組,其中'b'是'f'的返回類型。 – bheklilr
非常感謝!這是一個很好的解釋!欣賞它。 –
請您告訴我爲什麼這個'c b a = a b'的類型是'c :: t1 - >(t1 - > t) - > t'? @bheklilr –