Size: a a a

Scala User Group

2020 August 31

Oℕ

Oleg ℕizhnik in Scala User Group
Nikita🌈🦄🌈🇺🇦🇨🇦
а в чем тогда может быть причина и можно ли решить проблему малой кровью?
На всякий случай, в котах есть специальный синтаксис для Either[NonEmptyList[E], A]
.leftNel, .rightNel
https://scastie.scala-lang.org/Odomontois/YggtRdfKReik2paClGMy5w/16
источник

N

Nikita🌈🦄🌈🇺🇦🇨🇦... in Scala User Group
о, спасибо! пока не понял, почему и как это работает :D пока решение в лоб сделал- через leftMap скастовал свой тип на лист с этого типа. Наверное, стоит везде листы в других методах с похожими сигнатурами на спец листы из котов поменять
источник

Oℕ

Oleg ℕizhnik in Scala User Group
ну идея в том, что как правило странно было бы иметь "пустой список ошибок"
источник

Oℕ

Oleg ℕizhnik in Scala User Group
поэтому чтобы вы могли убедиться, что всегда есть хотя бы одна ошибка, используется NonEmptyList[String]
источник

N

Nikita🌈🦄🌈🇺🇦🇨🇦... in Scala User Group
угу, эту суть уловил
источник

Oℕ

Oleg ℕizhnik in Scala User Group
а вот эта строчка
  list.toNel.traverse_(_.asLeft)
это просто короткая запись такой формулы
list match {
 case Nil => Right(())
 case x :: rest => Left(NonEmptyList(x, rest))
}
источник

N

Nikita🌈🦄🌈🇺🇦🇨🇦... in Scala User Group
я ещё имплисит каст пробовал, но он не взлетел. он и не должен в таких случаях работать? я пробовал и айзер, и отдельно левый тип имписитом кастовать, компилятор все-равно LUB выводил
источник

Oℕ

Oleg ℕizhnik in Scala User Group
работает так - .toNel для списка возвращает Option[NonEmptyList[String]]
дальше у вас получается контейнер Option, и вы хотите если он непустой (т.е. для каждого элемента) сгенерировать ошибку
.traverse_ -это на кошачьем "для каждого элемента выполнить"
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Nikita🌈🦄🌈🇺🇦🇨🇦
я ещё имплисит каст пробовал, но он не взлетел. он и не должен в таких случаях работать? я пробовал и айзер, и отдельно левый тип имписитом кастовать, компилятор все-равно LUB выводил
зачем имплисит каст
источник

Oℕ

Oleg ℕizhnik in Scala User Group
чтобы строчку в список строчек превращать?
источник

N

Nikita🌈🦄🌈🇺🇦🇨🇦... in Scala User Group
ага
источник

Oℕ

Oleg ℕizhnik in Scala User Group
не надо так
источник

N

Nikita🌈🦄🌈🇺🇦🇨🇦... in Scala User Group
у меня не строчки там, у меня свой тип
источник

N

Nikita🌈🦄🌈🇺🇦🇨🇦... in Scala User Group
строчки я для примера в сниппете показал
источник

N

Nikita🌈🦄🌈🇺🇦🇨🇦... in Scala User Group
вернее трейт с АДТ на типы разных ошибок
источник

Oℕ

Oleg ℕizhnik in Scala User Group
ну вот сделайте себе синтаксис\функции, чтобы генерировать ошибки в разных случаях без имплисит кастов
источник

Oℕ

Oleg ℕizhnik in Scala User Group
целее будете
источник

N

Nikita🌈🦄🌈🇺🇦🇨🇦... in Scala User Group
ага, думаю над этим, но пока хорошего варианта не нашел, пишу как получатся. очень не хватает опыта работы с работающим продакшен кодом и просто людей, с которыми можно что-то обсудить и узнать бест практис:)
источник

N

Nikita🌈🦄🌈🇺🇦🇨🇦... in Scala User Group
так что спасибо за советы, я ещё приду с вопросами)
источник

ЮБ

Юрий Бадальянц... in Scala User Group
Скаланы, а вывести FunctorK из cats-tagless автоматом можно только для трейта? Для кейскласса он не сможет никак сгенерировать реализацию?
источник