在没有使用lenses的Haskell中,我可以做如下操作:
data Item = Item { quantity :: Double, price ::Double }
cost :: Item -> Double
cost = (*) <$> quantity <*> price
如果我使用镜头,如何实现同样的效果?我能做到的最好的是
cost = to $ (*) <$> (^. quantity) <*> (^. price)
有更好的方法吗?(当然我想要一个getter
或等效物)
cost = (*) <$> (^. quantity) <*> (^. price)
吗? - Aadit M Shahf <$>. l = f <$> (^. l)
和f <*>. l = f <*> (^. l)
。然后你的表达式变成了cost = (*) <$>. quantity <*>. price
。 - Aadit M ShahControl.Lens.Reified
:只读光学包装器具有您期望的函数实例,因此您可以执行runGetter ((*) <$> Getter quantity <*> Getter price)
。 - duplode