Maa*_*den 4 haskell function-composition
我碰到了的用法。我不太了解的运算子。
我本人试图对此进行推理,但得出的结论与GHCI产生的结论不同。
我正在:t检查表达式的类型。
我正在使用的函数是last和(.),它们具有以下签名:
last :: [a] -> a
(.) :: (b -> c) -> (a -> b) -> a -> c
Run Code Online (Sandbox Code Playgroud)
我感到困惑的功能是这样的:
(last .)
Run Code Online (Sandbox Code Playgroud)
我不确定这个构造是什么,但是我认为它与函数组成类似。使用我的推理,我希望这会产生以下功能:
(last .) :: (b -> [c]) -> (a -> b) -> a -> [c]
Run Code Online (Sandbox Code Playgroud)
什么:t实际上给了我是这样的:
(last .) :: (a -> [c]) -> a -> c
Run Code Online (Sandbox Code Playgroud)
这是中缀运算符部分 [Haskell-wiki]的示例:
(...)
(2^)(左侧部分)等效于(^) 2,或更详细地说\x -> 2 ^ x。
所以我们在这里构造了一个看起来像这样的函数:
\f -> last . fRun Code Online (Sandbox Code Playgroud)
或更短:
(.) lastRun Code Online (Sandbox Code Playgroud)
该(.) :: (b -> c) -> (a -> b) -> a -> c函数有两个函数g和h,并创建一个功能\x -> g (h x)。g因此,这里last。
因此,我们创建了一个函数,该函数将一个函数作为输入f :: b -> [c],然后返回last . f。