Size: a a a

Scala User Group

2020 April 15

D

Daniel in Scala User Group
Alex Sh
Оч. желательно, но к указанной выше проблеме это относится опосредовано.
у вас запись в базу и в кафку не атомарна. Что будет если прила умрет с OOM после записи в базу?
источник

AS

Alex Sh in Scala User Group
Daniel
у вас запись в базу и в кафку не атомарна. Что будет если прила умрет с OOM после записи в базу?
Это тоже не проблема, решение которой изначально мне хотелось получить.
Этот пример синтетический чтобы заострить внимание на тестировании последовательности вычислений a'la T => F[Unit]
Когда по значению возвращаемого типа нельзя однозначно судить о выполнении side-effect-а
источник

AS

Alex Sh in Scala User Group
А если точнее, то изначально было интересно узнать есть ли сейчас FP альтернативы для scalamock
источник

D

Daniel in Scala User Group
Alex Sh
А если точнее, то изначально было интересно узнать есть ли сейчас FP альтернативы для scalamock
MonadState + HasLens
источник

AS

Alex Sh in Scala User Group
Daniel
MonadState + HasLens
Можно ли привести ссылку на статью/видео/кусок кода где это используется в Scala?
источник

D

Daniel in Scala User Group
Alex Sh
Можно ли привести ссылку на статью/видео/кусок кода где это используется в Scala?
сто лет назад был митап, где Вова Самойлов рассказывал как это у нас сделано было, попробую найти ссылку на видос, вроде записывали
источник

AS

Alex Sh in Scala User Group
Daniel
сто лет назад был митап, где Вова Самойлов рассказывал как это у нас сделано было, попробую найти ссылку на видос, вроде записывали
Заранее спасибо 🙇‍♂️
источник

D

Daniel in Scala User Group
Alex Sh
Заранее спасибо 🙇‍♂️
источник

M

Mikhail in Scala User Group
Как убрать мнимые скобки(как они вобще называются?), которые появились относительно недавно в идее? (Скобок на самом деле нет, но идея сама их визуализирует)
источник

D

Daniel in Scala User Group
Mikhail
Как убрать мнимые скобки(как они вобще называются?), которые появились относительно недавно в идее? (Скобок на самом деле нет, но идея сама их визуализирует)
если вырубить подсветку типов, то и они уйдут? @sugakandrey
источник

λ

λoλegΥch in Scala User Group
идея говорит что у тебя тайпмисматч
источник

λ

λoλegΥch in Scala User Group
убери мисматч пропадут и "мнимые скобки"
источник

A

Aliaksandr in Scala User Group
Alex Sh
Насколько я понимаю, то на уровне типов в Скале нельзя гарантировать exactly-once вызовы методов.
Только at-least-once

def handle[F[_]: Monad](
 toDB: String => F[DBUnit],
 toKafka: (DBToken, String) => F[KafkaUnit],
 toLog: (KafkaUnit, String) => F[LogUnit]
): String => F[(DBUnit, KafkaUnit, LogUnit)] = { in =>
 for {
   dbUnit    <- toDB(in)
   kafkaUnit <- toKafka(dbUnit, in)
   // can't catch this faulty call with types
   _         <- toKafka(dbUnit, in)
   logUnit   <- toLog(kafkaUnit, in)
 } yield (dbUnit, kafkaUnit, logUnit)
}


Без linear types в этом случае никак
Можно попробовать сделать с помощью IndexedStateT
import cats._
import cats.data._
import cats.implicits._

case object WriteToDb
case object WriteToKafka
case object WriteToLog

case class DbToken(value: String) extends AnyVal

def handle[F[_]: Monad](
 toDB: String => IndexedStateT[F, Unit, WriteToDb.type, DbToken],
 toKafka: String => IndexedStateT[F, WriteToDb.type, WriteToKafka.type, Unit],
 toLog: String => IndexedStateT[F, WriteToKafka.type, WriteToLog.type, Unit]
): String => F[Unit] = { in =>
 (for {
   token <- toDB(in)
   _ <- toKafka(token.value)
   // _ <- toKafka(token.value) // compile error
   _ <- toLog(in)
 } yield ()).runA(())
}
источник

AS

Alex Sh in Scala User Group
Точно! IndexedState же есть! 👍
Забыл про него
источник

M

Mikhail in Scala User Group
λoλegΥch
убери мисматч пропадут и "мнимые скобки"
а где это в настройках? поиск по ключевикам не помогает (
источник

λ

λoλegΥch in Scala User Group
мисматч в твоем коде
источник

M

Mikhail in Scala User Group
λoλegΥch
мисматч в твоем коде
Мне надо отключить их в идее, а не код править. Они меня раздражают уже которую неделю)
источник

λ

λoλegΥch in Scala User Group
скобки нужны чтоб было понятно где мисматч
источник

λ

λoλegΥch in Scala User Group
можно отключить 'type mismatch hints'
источник

VC

Vadim ChelyshOv in Scala User Group
там часть этих штук прямо правым кликом в редакторе отключается
источник