Я видел несколько более старый вопрос на Как избежать загрязнения пространства имен в Haskell и ищу современное решение с использованием линз.
Я думаю, что подход будет состоять из нескольких шагов:
- Переписать поля так, чтобы они были удобными для линз:
field
-> _field
.
- Используйте линзы.
- Избегайте экспорта (или импорта на стороне пользователя)
_field
s.
Меня больше всего интересует пункт 3 в этом вопросе, так как я думаю, что могу выяснить остальное на основе существующих ресурсов. Но, возможно, это невозможно.