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
имеет очень большое количество модулей и использует языковые расширения для выполнения задания.