Size: a a a

Scala User Group

2016 April 16

ЮБ

Юрий Бадальянц in Scala User Group
Спасибо, попробую вникнуть
источник

ЮБ

Юрий Бадальянц in Scala User Group
И правда стало понятнее. Просто никогда такой магией не пользовался.
источник

WB

Warren Buffett in Scala User Group
Одно распространённое применение этой магии - .sequenceU.
У нас есть список строк, в которых должен быть JSON:
val jsonStrings: List[String] = ???

Мы хотим спарсить это в scalaz Validation[String, JSON] (аналог Either) функиией parse:
def parse(jsonString: String): Validation[String, JSON] = ???
val validJsons: List[Validation[String, JSON]] = jsonStrings.map(parse)

Теперь мы лёгким движением руки можем превратить этот список валидаций в список JSON'ов (при условии что ВСЕ они были валидными)!
validJsons.sequenceU // Validation[String, List[JSON]]
И работать с правой частью не думаю о возможной ошибке, используя flatMap или аппликативный билдер. Это безумно удобно, особенно если подсесть на Validation[NonEmptyList, _].

Фишка в том что если наша функция parse выдаёт Option[JSON] (или любую другую "монадическую" структуру с одной дыркой, например Future[JSON]), то мы используем .sequence (без U), а для Dijsunction, Validation etc мы обязаны были использовать .sequenceU и для этого типа данных должен был быть определён класс типа Unapply (от определения которого глаза на лоб лезут https://github.com/scalaz/scalaz/blob/v7.1.3/core/src/main/scala/scalaz/Unapply.scala#L134-L144 и который не понимает Intellij IDEA и подсвечивает всю функцию красным) Теперь этот хак уйдёт в прошлое (хотя, даже если будет включен в 2.12 ждать нужно будет ещё не год и не два). Возможно не самое критичное проявление бага, но я пишу .sequenceU почти каждый день так что самое частое для меня
источник

WB

Warren Buffett in Scala User Group
Вот ещё одно интересное объяснение проблемы https://meta.plasm.us/posts/2015/07/11/roll-your-own-scala/
источник
2016 April 21

VS

Vladimir Sam in Scala User Group
Поделитесь, через как лучше начать изучать scalaz? Пока проблема тривиальная: хочется пачку разных монадных типов засунуть в один for comprehension
источник

WB

Warren Buffett in Scala User Group
парочка разных типов (если это для них определены монады) в for comprehensions это надо копать в сторону monad transformers. и я бы не сказал что это тема для совсем начинающих
источник

WB

Warren Buffett in Scala User Group
лично для меня хороший путь чтобы начать изучать scalaz - это начать использовать его. там есть gateway drugs, вроде \/ (disjunction), Validation, ValidationNel
источник

WB

Warren Buffett in Scala User Group
то есть я просто использовал их, потом как-то всё само собой понеслось
источник

WB

Warren Buffett in Scala User Group
но у меня это был долгий процесс
источник

WB

Warren Buffett in Scala User Group
потом начинаешь понимать зачем полугруппы нужны, моноиды, аппликативные билдеры
источник

WB

Warren Buffett in Scala User Group
может кстати лучше cats? там документация получше
источник

VS

Vladimir Sam in Scala User Group
cats как альтернатива идет? Я думал как дополнение
источник

WB

Warren Buffett in Scala User Group
нет. это целиком и полностью переписанный scalaz
источник

WB

Warren Buffett in Scala User Group
по назначению они идентичны
источник

WB

Warren Buffett in Scala User Group
причина его появления больше политическая нежели техническая
источник

VS

Vladimir Sam in Scala User Group
если так, то попробую в него посмотреть, спасибо
источник

WB

Warren Buffett in Scala User Group
scalaz попопулярнее и постабильнее, но cats очень перспективен, потому что документация, потому что очень активно развивается, потому что они очень благосклонны к новичкам. в общем, если нет жёстких зависимостей от scalaz - я бы советовал cats
источник

GP

Grigory Pomadchin in Scala User Group
cats сейчас модно +
источник

WB

Warren Buffett in Scala User Group
может опишете проблему с for comprehensions? может там и не трансформеры вовсе
источник

WB

Warren Buffett in Scala User Group
да. модно, молодёжно
источник