首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hlint建议:使用uncurry

Hlint建议:使用uncurry
EN

Stack Overflow用户
提问于 2018-03-15 20:40:16
回答 2查看 175关注 0票数 4

我有这行代码:

代码语言:javascript
复制
map (\(u,v) -> flatTorus n u v) gridUV

Hlint建议我将其替换为

代码语言:javascript
复制
map (uncurry (flatTorus n)) gridUV

这个建议的动机是什么?它仅仅是为了简短,还是其他东西(性能)?因为虽然它更长,但我发现第一个代码更容易阅读。

事实上,我的问题更一般,因为这只是其中的一个例子:Hlint建议通常只基于短期动机,还是建议背后有其他改进?

EN

回答 2

Stack Overflow用户

发布于 2018-03-16 14:35:28

我认为Hlint更喜欢使用uncurry,因为它为您提供了回调的不变表示。Lambda表达式天生对表示很敏感,因为

代码语言:javascript
复制
\(u, v) -> flatTorus n u v

等同于

代码语言:javascript
复制
\(x, y) -> flatTorus n x y

即使它们在文本上是不同的。

使用uncurry将读者从在头脑中进行alpha等价的认知负载中解放出来(例如,认识到上面两个表达式是相同的),但随后又让他们背负着必须记住组合符词汇的认知负载。归根结底,这是一个品味问题。

票数 2
EN

Stack Overflow用户

发布于 2018-03-16 15:53:19

它们实际上并不完全等同。

代码语言:javascript
复制
(\(x, y) -> (,) x y) undefined = undefined
uncurry (,) undefined = (undefined, undefined)

你是否应该采纳任何建议,对uncurry持保留态度。想一想,这种额外的懒惰是会有所帮助,还是会带来伤害,还是没有什么不同。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49299721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档