Oℕ
Size: a a a
Oℕ
Oℕ
Oℕ
Oℕ
Oℕ
Oℕ
P
Oℕ
AD
Oℕ
Oℕ
AD
Oℕ
ΛВ
Oℕ
P
Stream[F, Event]
, где Event может быть n разных сущностей. Foo(Reason(Banned), Source.Moderator, userId)
, где case class Foo(reason: Reason, source: Source, userId: UserId)
def moderatorBannedId: Traversal[Event, UserId] = ???
, которую заюзаем дальше в коде:def processor(...): Event => IO[Unit] = e => moderatorBannedId(e).map(dropDatabase)
AD
Oℕ
P
collect
, но его придется менять каждый раз и в каждом месте после каждого изменения Foo
ΛВ