[英]unlawful lens Haskell
对于不满足取出您放入的内容的属性的类似镜头的 object 是否有通用名称/类型? 例如像listLength:: Lens [a] Int
这样的东西,如果你输入一个比源列表更短的长度,你会得到一个缩短的列表,但如果你输入更长的长度,则保留原始长度。
镜头不只是型号为forall f. Functor f => (a -> fb) -> s -> ft
forall f. Functor f => (a -> fb) -> s -> ft
— 它是一个 function ,其类型符合某些法律。 特别是(如镜头文档中所述):
如果您的 function 不遵守这些法律,那么它只是一个类似于镜头类型的 function。
在您的特定示例中, listLength
违反了第一和第三定律,因此它不是镜头。 也就是说,它可以作为Getter
正常工作,我认为这是我们可以说的唯一原则。
更一般地说,询问缺乏法律的事物是没有意义的,因为事物往往是由它们遵守的法律而不是他们不遵守的法律来定义的。 例如,我指出listLength
是一个非常好的Getter
,因为它始终从[a]
输入中提取一个值。
所以,我会问你:它与总是发出0
的 function listZero:: Lens [a] Int
有什么区别? 你能想出一个listLength
遵守listZero
不遵守的一般规律吗? 如果是这样,那么您可以在当前的文献中实际寻找一些东西:也就是说, listLength
是一组遵循某些(可能有趣的)定律的函数之一。 如果没有,那么您只有一个 function,其类型使其看起来像镜头。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.