Data.Lens или Control.Lens

Возможный дубликат:
линзы, fclabels, data-accessor - какая библиотека для доступа к структурам и мутации лучше

Я собираюсь использовать и изучить пакет Lens в своем следующем проекте на Haskell. Я почти определился с пакетом Data.Lens, когда нашел этот пост, в котором упоминаются линзы van Laarhoven. в пакете Control.Lens.

Я еще недостаточно понимаю различия, чтобы решить, какой из них использовать. Какой пакет вы бы посоветовали мне изучить/использовать в реальном проекте?

Спасибо.

объективы, fclabels, data-accessor - какая библиотека для доступа к структуре и мутации лучше


person MFlamer    schedule 08.11.2012    source источник
comment
Что не так с ответом этой ссылки SO?   -  person Pubby    schedule 08.11.2012
comment
Что-то может быть неправильным с ответом этой ссылки SO, но если вы не сообщите нам то, что хотите знать, чего нет в этом ответе, вы не получите нужную информацию. .   -  person Ben    schedule 08.11.2012
comment
Я предполагаю, что это третья точка зрения, которую я ищу. Этот пост SO был написан создателем обоих пакетов. Он дает некоторое сравнение между двумя, но это немного выше моего понимания.   -  person MFlamer    schedule 08.11.2012
comment
В другом сообщении даже не упоминается Control.Lens, поэтому я не понимаю, как это дубликат.   -  person Adam Bell    schedule 16.11.2012


Ответы (3)


Control.Lens почти наверняка то, что вам нужно. Первым появился Data.Lens, он проще, но Control.Lens имеет много преимуществ и активно развивается.

Помимо линз, Control.Lens имеет много связанных типов, таких как обходы (обход подобен линзе, которая может ссылаться на n значений вместо одного), складки, линзы только для чтения/изменения, индексированные линзы, изоморфизмы... с гораздо большей библиотекой полезных функций и предопределенными линзами для стандартных типов библиотек, Template Haskell для получения линз и кучей кода для других вещей, таких как общие застежки-молнии и универсальный обход в стиле uniplate.

Это большая библиотека — вам не обязательно использовать ее всю, но приятно иметь то, что вы хотите, уже написанным.

Основное преимущество Data.Lens заключается в том, что он проще и, как таковой, не требует расширений за пределами Haskell 98. Но учтите, что если вы просто хотите экспортировать объектив в стиле Control.Lens из библиотеки, вы можете сделать это, не выходя из Haskell 98 -- на самом деле, вообще не завися от пакета.

person shachaf    schedule 08.11.2012
comment
Проведя небольшое исследование прошлой ночью, я пришел к такому же выводу. Спасибо за отличные ответы. - person MFlamer; 09.11.2012

Если вы имеете дело с проектом реального мира (tm), я настоятельно рекомендую Control.Lens. Эдвардк в последнее время приложил к этому много усилий, и я уверен, что он хотел бы услышать о вашем варианте использования. На мой взгляд, это станет канонической библиотекой Lens. Я считаю, что можно с уверенностью сказать, что все, что вы можете сделать с Data.Lens, вы можете сделать с Control.Lens.

person Dan Burton    schedule 08.11.2012

Data.Lens намного проще и удобнее работать. Control.Lens имеет очень большое количество модулей и использует языковые расширения для выполнения своей работы.

person singpolyma    schedule 08.11.2012