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ΛВ