2015-11-07 36 views
3

我是镜头库的初学者。 我想从一些数据结构中提取一个列表。如何在Haskell中使用镜头处理列表

我不知道如何实现f,其满足

("a",[(0,'a'),(1,'b'),(2,'c')]) ^. _2 . f === [0,1,2] 

随着斗争,我找到了答案。

g :: Functor f => Getting a s a -> (forall b. Getting (f b) (f s) (f a)) 
g = to . fmap . view 
f = g _1 

是否有与g相对应的库函数? 否则,有没有更优雅的方式来实现这样的f

回答

4

我会去

("a",[(0,'a'),(1,'b'),(2,'c')]) ^.. _2 . traverse . _1 

(注意^..,而不是^.,因为这是一个穿越。)