Size: a a a

2020 June 25

JS

Jerzy Syrowiecki in Haskell
S B
а можно ссылкой7
источник

AV

Alexander Vershilov in Haskell
источник

НА

Николай Артамонов... in Haskell
Камрады, а есть ли в хаскеле библиотеки для декодирования JSON, которые позволяют при определении декодера (или парсера, в зависимости от терминологии) использовать функции с IO-эффектами? К примеру, я хочу написать декодер с встроенной логикой валидации, которая проверяет, что какое-то поле декодируемой структуры больше текущего времени. Насколько я понимаю, в aeson такой декодер нельзя написать?
источник

JS

Jerzy Syrowiecki in Haskell
Николай Артамонов
Камрады, а есть ли в хаскеле библиотеки для декодирования JSON, которые позволяют при определении декодера (или парсера, в зависимости от терминологии) использовать функции с IO-эффектами? К примеру, я хочу написать декодер с встроенной логикой валидации, которая проверяет, что какое-то поле декодируемой структуры больше текущего времени. Насколько я понимаю, в aeson такой декодер нельзя написать?
лучше отдельно декодировать что есть, а потом отдельно провалидировать
источник

AV

Alexander Vershilov in Haskell
Не надо этого хотеть
источник

JS

Jerzy Syrowiecki in Haskell
в Aeson.FromJSON нельзя, но вообще с помощью Aeson можно
источник

MK

Maxim Koltsov in Haskell
Alexander Vershilov
Не надо этого хотеть
++
источник

AV

Alexander Vershilov in Haskell
Ну и плохо, что magicFromJSON <=< magicToJSON не будет работать
источник

AV

Alexander Vershilov in Haskell
более того magicFromJSON <=< magicToJSON <=< magicFromJSON - не будет
источник

AV

Alexander Vershilov in Haskell
Если за момент между первым fromjson и вторым поле "устареет"
источник

НА

Николай Артамонов... in Haskell
Да, согласен, не подумал об этом..
источник

AV

Alexander Vershilov in Haskell
В общем чистый декорер и потом валидация - это круто
источник

AV

Alexander Vershilov in Haskell
Можно даже разные типы под это завести
источник

AV

Alexander Vershilov in Haskell
Из разряд "хочется странного" можно было бы использовать unsafePerformIO и воткнуть IO даже в fromJSON.

Ещё можно разобрать Value при помощи aeson-lens, и тогда вокруг можно делать любые эффекты и это будет явно видно
источник

AV

Alexander Vershilov in Haskell
(Я не имею правда не ответить на изначальный вопрос, даже если считаю, что проблему так решать не надо)
источник

НА

Николай Артамонов... in Haskell
Да в том-то и дело, что хотелось избежать разных типов: один тип - чисто DTO, другой - предметный. Хотелось сразу в предметный декодировать. А предметный у меня создается смарт-конструктором, который сразу проверяет, что все инварианты предметной области соблюдены. И не позволяет сконструировать значение с некорректными инвариантами. Получается, что придется все же вводить DTO'шку промежуточную.
источник

MK

Maxim Koltsov in Haskell
я думаю Саша может много рассказать к чему приводит отказ от DTO.....
источник

AV

Alexander Vershilov in Haskell
К лишней боли, когда один из них надо поменять сохраняя другой
источник

AP

Aleksei (astynax) Pi... in Haskell
HOD плюс декодирование в две фазы?
источник

AP

Aleksei (astynax) Pi... in Haskell
Сначала в T Value, а потом в T T2
источник