[英]Newbie question on syntax and type signature in Haskell/HappStack
[英]haskell type signature question
有人可以解釋一下,為什么這些函數具有不同數量的參數和行為 ,但是具有相同的類型簽名 ,但是它們都是正確的?
comp1 :: (a -> b) -> (b -> c) -> a -> c
comp1 f g = g.f
comp2 :: (a -> b) -> (b -> c) -> a -> c
comp2 f g x = g (f x)
還有,為什么comp2有
comp2 :: (a -> b) -> (b -> c) -> a -> c
而不是像
comp2 :: a -> (a -> b) -> (b -> c) -> a -> c
?
謝謝。
comp2 f g x = g (f x)
是語法糖
comp2 = \f -> \g -> \x -> g (f x)
相似地
comp1 f g = g.f
是糖
comp1 = \f -> \g -> g.f
的定義.
是:
f1 . f2 = \x -> f1 (f2 x) -- Names of arguments have been changed to avoid confusion
因此,如果將定義插入到comp1的簡化格式中, comp1
得到:
comp1 = \f -> \g -> \x -> g (f x)
這與comp2的簡化形式comp2
,因此顯然定義是等效的。
咖喱 。 ML和Haskell中的多參數函數只是返回一個函數的單參數函數的語法糖。 它返回的函數采用其余參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.