Size: a a a

ПОКА ОДЕРСКИ НЕ ВИДИТ (как мы разрешаем котикам срать)

2020 May 19

ZM

ZLoyer Matveev in ПОКА ОДЕРСКИ НЕ ВИДИТ (как мы разрешаем котикам срать)
@odomontois а можешь для тупых объяснить почему такое возможно

@typeclass trait Embed[U[_[_]]] {
 def embed[F[_]: FlatMap](ft: F[U[F]]): U[F]
}


зная про F только наличие FlatMap, мы можем от него избавиться снаружи
источник

λ

λoλzod in ПОКА ОДЕРСКИ НЕ ВИДИТ (как мы разрешаем котикам срать)
ZLoyer Matveev
@odomontois а можешь для тупых объяснить почему такое возможно

@typeclass trait Embed[U[_[_]]] {
 def embed[F[_]: FlatMap](ft: F[U[F]]): U[F]
}


зная про F только наличие FlatMap, мы можем от него избавиться снаружи
List[Option[List]].sequence.map(_.flatten) как-то так наверное
источник

ZM

ZLoyer Matveev in ПОКА ОДЕРСКИ НЕ ВИДИТ (как мы разрешаем котикам срать)
sequence уже больше требует
источник

ZM

ZLoyer Matveev in ПОКА ОДЕРСКИ НЕ ВИДИТ (как мы разрешаем котикам срать)
причем для U
источник

λ

λoλcat in ПОКА ОДЕРСКИ НЕ ВИДИТ (как мы разрешаем котикам срать)
ZLoyer Matveev
@odomontois а можешь для тупых объяснить почему такое возможно

@typeclass trait Embed[U[_[_]]] {
 def embed[F[_]: FlatMap](ft: F[U[F]]): U[F]
}


зная про F только наличие FlatMap, мы можем от него избавиться снаружи
trait Logging[F[_]] {
 def info(msg: String): F[Unit]
}


F HasContext Ctx


val logging: F[Logging[F]] = ask { ctx =>
 new Logging[F] {
   def info (msg: String): F[Unit] = F.delay(println(s"$msg [$ctx]"))
 }
}


val embLogging: Logging[F] = logging.embed
источник

λ

λoλcat in ПОКА ОДЕРСКИ НЕ ВИДИТ (как мы разрешаем котикам срать)
Чтобы сделать embed нужно знать структуру трейта, конечно. На каких позициях там F находится. Но от самого F только флэтмап требуется
источник

λ

λoλcat in ПОКА ОДЕРСКИ НЕ ВИДИТ (как мы разрешаем котикам срать)
Попробуй вывести инстанс ембеда для такого трейта
источник

λ

λoλcat in ПОКА ОДЕРСКИ НЕ ВИДИТ (как мы разрешаем котикам срать)
Ну и ембеддить нужно только всякие чтения из ридеров и рефов. Никаких серьезных эффектов. Т.к. это будет делаться при каждом вызове метода
источник

λ

λoλcat in ПОКА ОДЕРСКИ НЕ ВИДИТ (как мы разрешаем котикам срать)
Эх Дегуз
https://twitter.com/jdegoes/status/1262484500199677954?s=19

Скажите ему кто-нибудь
источник

λ

λoλcat in ПОКА ОДЕРСКИ НЕ ВИДИТ (как мы разрешаем котикам срать)
Что это говно на палке
источник

ZM

ZLoyer Matveev in ПОКА ОДЕРСКИ НЕ ВИДИТ (как мы разрешаем котикам срать)
λoλcat
Попробуй вывести инстанс ембеда для такого трейта
спасиб, ушел переваривать
источник

λ

λoλdog in ПОКА ОДЕРСКИ НЕ ВИДИТ (как мы разрешаем котикам срать)
λoλcat
Что это говно на палке
Да он много гавна делает, пора привыкнуть)
источник

AT

Aλeksei Tereχin in ПОКА ОДЕРСКИ НЕ ВИДИТ (как мы разрешаем котикам срать)
ZLoyer Matveev
@odomontois а можешь для тупых объяснить почему такое возможно

@typeclass trait Embed[U[_[_]]] {
 def embed[F[_]: FlatMap](ft: F[U[F]]): U[F]
}


зная про F только наличие FlatMap, мы можем от него избавиться снаружи
Блин Олег пояснял где то
источник

ZM

ZLoyer Matveev in ПОКА ОДЕРСКИ НЕ ВИДИТ (как мы разрешаем котикам срать)
λoλdog
Да он много гавна делает, пора привыкнуть)
плохая привычка
источник

λ

λoλcat in ПОКА ОДЕРСКИ НЕ ВИДИТ (как мы разрешаем котикам срать)
Aλeksei Tereχin
Блин Олег пояснял где то
Берял
источник

λ

λoλcat in ПОКА ОДЕРСКИ НЕ ВИДИТ (как мы разрешаем котикам срать)
А, не. Он про Мид пояснял
источник

λ

λoλdog in ПОКА ОДЕРСКИ НЕ ВИДИТ (как мы разрешаем котикам срать)
И про мид пояснял Олег
источник

ZM

ZLoyer Matveev in ПОКА ОДЕРСКИ НЕ ВИДИТ (как мы разрешаем котикам срать)
Aλeksei Tereχin
Блин Олег пояснял где то
да, но я тогда не включал голову и сходу было не понятно (он часто очевидный ему контекст оставляет в голове)
источник

λ

λoλcat in ПОКА ОДЕРСКИ НЕ ВИДИТ (как мы разрешаем котикам срать)
Идите в доку законтрибьютьте
источник

ZM

ZLoyer Matveev in ПОКА ОДЕРСКИ НЕ ВИДИТ (как мы разрешаем котикам срать)
λoλcat
Идите в доку законтрибьютьте
закинул пример Беряла в гист олеговский сегодня, лол
источник