Size: a a a

Scala User Group

2020 February 19

λ

λoλcat in Scala User Group
Anton Semenov
Всем доброго дня.

Подскажите, можно ли написать более декларативно, используя только cats-effect?

def getPage(pageNo: Int): IO[List[T]] = ???

def getAllPages[T](): IO[List[T]] = {
 def loop(pageNo: Int, acc: List[T]): IO[List[T]] =
   getPage(pageNo).flatMap {
     case Nil => IO.pure(acc)
     case ls => loop(pageNo + 1, acc ::: ls)
   }

 loop(1, Nil)
}

Scastie: https://scastie.scala-lang.org/WteekClkScOlKY1M0RuAWQ
Решается однострочным фолдом
источник

λ

λoλcat in Scala User Group
Anton Semenov
Всем доброго дня.

Подскажите, можно ли написать более декларативно, используя только cats-effect?

def getPage(pageNo: Int): IO[List[T]] = ???

def getAllPages[T](): IO[List[T]] = {
 def loop(pageNo: Int, acc: List[T]): IO[List[T]] =
   getPage(pageNo).flatMap {
     case Nil => IO.pure(acc)
     case ls => loop(pageNo + 1, acc ::: ls)
   }

 loop(1, Nil)
}

Scastie: https://scastie.scala-lang.org/WteekClkScOlKY1M0RuAWQ
источник

λ

λoλcat in Scala User Group
Как жаль, что коты говно... И монадический редьюс на Редьюсабле не такой же ленивый как foldM
источник

AS

Anton Semenov in Scala User Group
Как-то совсем проморгал наличие foldM, огромное спасибо. Немного смущает, правда, использование трансформеров для такой простой задачи, но думаю скорее с непривычки.
источник

λ

λoλcat in Scala User Group
Это для фейлфаст завершения свертки
источник

λ

λoλcat in Scala User Group
Можно сделать фолдом с функцией и евалом
источник

AS

Anton Semenov in Scala User Group
Да нет, причина абсолютна понятна, просто интуитивно ассоциирую трансформеры с чем-то более громоздким.

В любом случае, с foldM думаю можно прийти к более оптимальному варианту, попробую. Ещё раз большое спасибо.
источник

λ

λoλcat in Scala User Group
foldM + EitherT
либо
tailRecM
источник

λ

λoλdog in Scala User Group
Кот, а когда ты напишешь код для меня ?
источник

λ

λoλcat in Scala User Group
λoλdog
Кот, а когда ты напишешь код для меня ?
😔
источник

Oℕ

Oleg ℕizhnik in Scala User Group
я так понимаю, кот имеет что-то вроде такого https://scastie.scala-lang.org/Odomontois/S3LbIsMdSAaaHsUhnF3Wzg/3
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Но всё равно не похоже на что-то, что пишется в одну строчку
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Всё равно, кажется, что есть мотивация для https://github.com/TinkoffCreditSystems/tofu/pull/159
источник

VP

Vladimir Popov in Scala User Group
всем приветы! ссылка на трансляцию сегодняшнего митапа https://youtu.be/f9DkzQfE75o
источник

λ

λλ in Scala User Group
щас бы штаны и никс поюзать ) никогда не променяю винду и мавен
источник

SS

Salem Saberhagen in Scala User Group
λλ
щас бы штаны и никс поюзать ) никогда не променяю винду и мавен
А ты смешной
источник

SS

Salem Saberhagen in Scala User Group
Vladimir Popov
всем приветы! ссылка на трансляцию сегодняшнего митапа https://youtu.be/f9DkzQfE75o
Пивас то завезут ?
источник

VP

Vladimir Popov in Scala User Group
надежда умирает последней
источник

SS

Salem Saberhagen in Scala User Group
😢
источник

λ

λλ in Scala User Group
Salem Saberhagen
А ты смешной
спасибо
источник