Предупреждение: следует умозрительный ответ.
Одно из различий между двумя сценариями, о которых я могу подумать, заключается в том, что довольно легко прояснить, когда toEnum
ломается (цитируя lens docs : «это только изоморфизм от фактически используемого числового диапазона»), в то время как все немного мрачнее, когда дело доходит до read
.Другое отличие состоит в том, что toEnum
- это метод Enum
(и тот, который требуется в минимальном определении экземпляра), в то время как read
на самом деле не является методом Read
, и поэтому в некотором смыслеменее существенным (на самом деле base docs явно препятствует его использованию ).
На более общей ноте, когда дело доходит до выбора между выставлением пули -защищенный интерфейс и включая полезные, но потенциально небезопасные или незаконные комбинаторы, lens обычно подходит для последних, делая их доступными для тех, кто желает их использовать, признавая любые потенциальные проблемы в документации (или, в случаях с более опаснымив именах функций и модулей).Учитывая, что lens является библиотекой очень общего назначения, такой подход можно рассматривать как неубежденный выбор - в таком контексте может быть трудно компенсировать отсутствие комбинаторов.
PS: Также стоит отметить, что объектив кодирует read
и show
через _Show
призму ._Show
эквивалентно prism' show readMaybe
и является безопасным в отношении чётности Read
-ing значений.