我只知道一个有效,另一个无效。
上下文:
我有一个数据结构F
,其中包含Data.Map.Map k S
另一个数据结构S
。我的目标是建立一个Lens
给定的F
并且k
将描述一个领域的S
.
困难在于k
地图中可能不存在密钥。很好,该函数可以将其返回值包装在 Maybe 中。但是我无法通过 Maybe using 传播镜头at
。在阅读了很多 Stack Overflow 的答案后,我遇到了这个。
事实证明,如果我也at
替换为.ix
(^.)
(^?)
问题:
看起来at
和ix
做同样的事情,至少在Map
. 两者都取一个键并为该键的值提供一个“镜头”。但是,ix
似乎与函数组合运算符配合得很好(.)
。两者有什么区别?
离题咆哮:
我和其他人一样喜欢中缀运算符,但 Control.Lens 包似乎有点过火了。对于一个有一些英文名字和某个地方的键的新用户来说,学习曲线会降低。由于 Lens 库中使用了大量的包装类,如果您还不知道发生了什么,则特别难以挖掘类型签名。看在老天的份上,我的代码开始看起来像 Perl。