Size: a a a

ПОКА ОДЕРСКИ НЕ ВИДИТ (GCерковноPRиходскую SCоLу)

2020 August 12

a

aλeχknvl in ПОКА ОДЕРСКИ НЕ ВИДИТ (GCерковноPRиходскую SCоLу)
я исследовал вопрос в основном ради абстракции над IO.recoverWith/IO.flatMap
источник

SK

Sergey Kucherenko in ПОКА ОДЕРСКИ НЕ ВИДИТ (GCерковноPRиходскую SCоLу)
@alexknvl спасибо
источник

ᛒᚨᚱᛏᛟᛋᛋᛟ... in ПОКА ОДЕРСКИ НЕ ВИДИТ (GCерковноPRиходскую SCоLу)
источник

ᛒᚨᚱᛏᛟᛋᛋᛟ... in ПОКА ОДЕРСКИ НЕ ВИДИТ (GCерковноPRиходскую SCоLу)
^ @odomontois и я
источник

Oℕ

Oleg ℕizhnik in ПОКА ОДЕРСКИ НЕ ВИДИТ (GCерковноPRиходскую SCоLу)
Спасибо большое. Очень понравилась статья. Книгу скачал - обязательно почитаю. Сам я пишу на тайп-скрипт, не используя классы - на одних замыканиях (в стиле fantasy-land, но без либы). Пример конкретного билдера (ООП паттерн) у меня может выглядеть например так:

const Builder = <T extends {}>(model: T) => ({
   withComment: (comment: string) => Builder({ ...model, comment }),
   withSpecialComment: () => Builder(model).withComment('Special comment'),
   withTrackingNumber: (tracking: number) => Builder({ ...model, tracking }),
   build: () => model })

const a = Builder({});
// a.withComment('test').build().tracking // Property 'tracking' does not exist on type '{ comment: string; }'
console.log(a.withTrackingNumber(1234).withSpecialComment().build().tracking)
источник

w

welcometotheclubbudd... in ПОКА ОДЕРСКИ НЕ ВИДИТ (GCерковноPRиходскую SCоLу)
Oleg ℕizhnik
Спасибо большое. Очень понравилась статья. Книгу скачал - обязательно почитаю. Сам я пишу на тайп-скрипт, не используя классы - на одних замыканиях (в стиле fantasy-land, но без либы). Пример конкретного билдера (ООП паттерн) у меня может выглядеть например так:

const Builder = <T extends {}>(model: T) => ({
   withComment: (comment: string) => Builder({ ...model, comment }),
   withSpecialComment: () => Builder(model).withComment('Special comment'),
   withTrackingNumber: (tracking: number) => Builder({ ...model, tracking }),
   build: () => model })

const a = Builder({});
// a.withComment('test').build().tracking // Property 'tracking' does not exist on type '{ comment: string; }'
console.log(a.withTrackingNumber(1234).withSpecialComment().build().tracking)
могу провести ресерч по читаемости среди моих коллег
источник

a

aλeχknvl in ПОКА ОДЕРСКИ НЕ ВИДИТ (GCерковноPRиходскую SCоLу)
я честно говоря не уверен по поводу (L, *) и R => *
источник

a

aλeχknvl in ПОКА ОДЕРСКИ НЕ ВИДИТ (GCерковноPRиходскую SCоLу)
надо расписать, может работает. Either[L, *] точно работает
источник

a

aλeχknvl in ПОКА ОДЕРСКИ НЕ ВИДИТ (GCерковноPRиходскую SCоLу)
получается MonadThrow
источник

a

aλeχknvl in ПОКА ОДЕРСКИ НЕ ВИДИТ (GCерковноPRиходскую SCоLу)
если I[A] = R => A, то flatMap странный получается
источник

a

aλeχknvl in ПОКА ОДЕРСКИ НЕ ВИДИТ (GCерковноPRиходскую SCоLу)
def flatMap[A, B](f: (R => A) => F[B]): F[A] => F[B]
источник

P

Pavel in ПОКА ОДЕРСКИ НЕ ВИДИТ (GCерковноPRиходскую SCоLу)
Oleg ℕizhnik
Pavel так ты где наткнулся то на них
коллега упомянул и ушел в оффлайн
источник

a

aλeχknvl in ПОКА ОДЕРСКИ НЕ ВИДИТ (GCерковноPRиходскую SCоLу)
trait RMonad[I[_], F[_]] {
 def pure[A](ja: I[A]): F[A]
 def flatMap[A, B](ma: F[A])(f: I[A] => F[B]): F[B]
}

final case class Reader[-R, +A](run: R => A)

object Foo {
 def foo[R]: RMonad[(R => *), Reader[R, *]] =
   new RMonad[(R => *), Reader[R, *]] {
     type I[A] = R => A
     type F[A] = Reader[R, A]

     def pure[A](ja: I[A]): F[A] = Reader(ja)
     def flatMap[A, B](ma: F[A])(f: I[A] => F[B]): F[B] = f(ma.run)
   }
}
источник

w

welcometotheclubbudd... in ПОКА ОДЕРСКИ НЕ ВИДИТ (GCерковноPRиходскую SCоLу)
aλeχknvl
trait RMonad[I[_], F[_]] {
 def pure[A](ja: I[A]): F[A]
 def flatMap[A, B](ma: F[A])(f: I[A] => F[B]): F[B]
}

final case class Reader[-R, +A](run: R => A)

object Foo {
 def foo[R]: RMonad[(R => *), Reader[R, *]] =
   new RMonad[(R => *), Reader[R, *]] {
     type I[A] = R => A
     type F[A] = Reader[R, A]

     def pure[A](ja: I[A]): F[A] = Reader(ja)
     def flatMap[A, B](ma: F[A])(f: I[A] => F[B]): F[B] = f(ma.run)
   }
}
а можно рисунок фотографии скриншота?
источник

KC

Kain Crow in ПОКА ОДЕРСКИ НЕ ВИДИТ (GCерковноPRиходскую SCоLу)
Aλeksei Tereχin
наконец то увидели премиум кота
cats-premium
источник

a

aλeχknvl in ПОКА ОДЕРСКИ НЕ ВИДИТ (GCерковноPRиходскую SCоLу)
неясная такая абстракция
источник

a

aλeχknvl in ПОКА ОДЕРСКИ НЕ ВИДИТ (GCерковноPRиходскую SCоLу)
Pavel
и вот даже глядя на этот пример не могу придумать проблему, на которую посмотрев могу сказать о, так это решается с помощью relative monad. но это каеш не совсем правильный подход
я тоже не могу
источник

a

aλeχknvl in ПОКА ОДЕРСКИ НЕ ВИДИТ (GCерковноPRиходскую SCоLу)
с зависимыми типами - может быть
источник

a

aλeχknvl in ПОКА ОДЕРСКИ НЕ ВИДИТ (GCерковноPRиходскую SCоLу)
и то тяжко
источник

a

aλeχknvl in ПОКА ОДЕРСКИ НЕ ВИДИТ (GCерковноPRиходскую SCоLу)
короче забей на эту тему. это как супермонады
источник