2015-11-07 2 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 

(Обратите внимание на ^.. вместо ^., потому что это является обходом.)

Смежные вопросы