我想检查一下,如果没有括号,我们是否不能用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]]]
但我想确定我没有跳过上面的一些选项。 谢谢
答案 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();
}
}