用$括号括起来重写`map(f.g.h)x`?

时间:2018-03-19 14:39:20

标签: haskell

我想检查一下,如果没有括号,我们是否不能用map (f.g.h) x重写$,因为我找不到方法。

以下是我的试验:

map (f.g.h) x
-> map (f.g.h) $ x  -- OK, no benefit
-> map $ f.g.h $ x  -- wrong as map doesn't take one parameter
-> (map $ f.g.h) x  -- Ok, no benefit, ugly :-)

我发现只有优雅的选项才能使用

negate . sum . tail <$> [[1..5], [3..6]]]

但我想确定我没有跳过上面的一些选项。 谢谢

2 个答案:

答案 0 :(得分:8)

怎么样?

let u = f.g.h in map u x

没有括号,没有$

答案 1 :(得分:5)

如果定义功能

map (f.g.h) x

因此,您使用x处理<{> f . g . h的每个元素,这意味着我们首先在其上应用h,然后在g上应用f结果,最后map结果。

但我们也可以使用三个单独的map f $ map g $ map h x ,例如:

private void Mq_ReceiveCompleted(object sender, ReceiveCompletedEventArgs e)
    {
        FailureCheck();

        if (!failure)
        {
            // Process message
        }
        else
        {
            OnStop();
        }
    }