能否无括号使用$改写Haskell表达式map (f.g.h) x?
关于Haskell中用
$替代map (f.g.h) x括号的疑问解答 嘿,刚好我对这个点也挺熟悉的,来给你确认下:确实没办法完全去掉括号,只靠$操作符来改写map (f.g.h) x,你尝试的几种情况其实都覆盖了可能的路径:
map (f.g.h) $ x:这个确实可行,但本质上只是把原写法里最后一个参数的括号换成了$,并没有真正减少括号的使用,也没带来什么写法上的优势map $ f.g.h $ x:报错是必然的,因为$是右结合的操作符,这行代码会被解析成map (f.g.h $ x)——但f.g.h $ x是一个计算后的值,不是函数,而map需要接收一个函数和一个列表两个参数,自然会报错(map $ f.g.h) x:这个写法语法上没问题,但额外加了一对括号,反而比原写法更啰嗦,确实算不上美观
你找到的negate . sum . tail <$> [[1..5], [3..6]]这个写法,确实是这类场景下最优雅的无括号方案了!因为<$>就是fmap,而列表的map其实就是fmap的特例,用<$>可以直接把复合函数放在左边,目标列表放在右边,完全不需要额外括号,非常符合Haskell的简洁风格。
目前来看,确实没有其他只靠$就能完全去掉括号的写法了,<$>就是最优解啦~
内容的提问来源于stack exchange,提问作者Šefčíková Jana
相关产品推荐
相关产品推荐

