我有这行代码:
map (\(u,v) -> flatTorus n u v) gridUVHlint建议我将其替换为
map (uncurry (flatTorus n)) gridUV这个建议的动机是什么?它仅仅是为了简短,还是其他东西(性能)?因为虽然它更长,但我发现第一个代码更容易阅读。
事实上,我的问题更一般,因为这只是其中的一个例子:Hlint建议通常只基于短期动机,还是建议背后有其他改进?
发布于 2018-03-16 14:35:28
我认为Hlint更喜欢使用uncurry,因为它为您提供了回调的不变表示。Lambda表达式天生对表示很敏感,因为
\(u, v) -> flatTorus n u v等同于
\(x, y) -> flatTorus n x y即使它们在文本上是不同的。
使用uncurry将读者从在头脑中进行alpha等价的认知负载中解放出来(例如,认识到上面两个表达式是相同的),但随后又让他们背负着必须记住组合符词汇的认知负载。归根结底,这是一个品味问题。
发布于 2018-03-16 15:53:19
它们实际上并不完全等同。
(\(x, y) -> (,) x y) undefined = undefined
uncurry (,) undefined = (undefined, undefined)你是否应该采纳任何建议,对uncurry持保留态度。想一想,这种额外的懒惰是会有所帮助,还是会带来伤害,还是没有什么不同。
https://stackoverflow.com/questions/49299721
复制相似问题