Похоже на этот вопрос , но еще больше во время выполнения.
Есть ли способ автоматически генерировать линзы или любой другой механизм для доступа к полям по имени во время выполнения?
Я ищу что-то похожее на field
из generic-lens
, за исключением того, что принимаю имя поля в качестве аргумента времени выполнения вместо параметра type-leve (и возвращаю Maybe
).
Мне достаточно удобно писать это самому, но я думаю, что это, вероятно, уже существует.
Пример
data Foo = Foo { bar :: Bar }
data Bar = ...
Получение Generic
, вы можете использовать generic-lens
, чтобы получить удобный field @"bar"
объектив - но есть ли способ автоматически генерировать / получать fieldAtRuntime "bar"
, который ведет себя так же (или аналогично)?
Мотивация
I хотите перемещаться по некоторым пользовательским структурам данных, используя пути JSON. Для меня не имеет значения, что JSON может не совпадать точно с полями записи, но я не хочу сериализовать, проходить и десериализовать.