Data.Lens или Control.Lens

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

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

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

Спасибо.

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

Ответ 1

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

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

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

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

Ответ 2

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

Ответ 3

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