
Denis
29.05.2017
12:41:22
не добавил
я про другое

Mikhail
29.05.2017
12:41:58

Google

Denis
29.05.2017
12:42:00
я думал это про блоки и мух от котлет )

Alexey
29.05.2017
12:42:38

Mikhail
29.05.2017
12:43:36

Alexey
29.05.2017
12:46:23
там чувак в коментах подсказывает как нам перейти на монады
> Как будут по вашему выглядеть сервисы, если всё вокруг обвешать ридерами?
Это только поначалу неудобно. Когда вы втягиваетесь в функциональное программирование, становится трудно остановиться. Сначала монады, потом трансформеры, потом Free, потом eff.
сидеть на том самом стуле, наверняка, тоже только поначалу не удобно

Oleg
29.05.2017
12:48:12
Ну вот если взять какой-то стримовый кусок кода, в него кастомную манатку можно запихнуть только в случае (cats\scalaz).iteratee
Если какой-то чувак в команде внезапно полюбил акторы - оборачивать хитрым функтором все мессаджи
А ExecutionContext он вездесущ
Так что я пост всё равно плюсанул.

Denis
29.05.2017
12:51:04

Oleg
29.05.2017
12:51:55

Denis
29.05.2017
12:51:59
да

Oleg
29.05.2017
12:52:14
Ну а если любой другой стейдж

Google

Denis
29.05.2017
12:52:36
ну в этом случае это край света
то есть все твои абстракции разбиватются либо об Future либо об Id
или Eval

Oleg
29.05.2017
12:54:10
Интересно, насколько сложно навернуть какой-то
ContextualActorMaterializer[C]

Denis
29.05.2017
12:54:36
и где брать контекст на ступенях?

Oleg
29.05.2017
12:54:36
Чтобы он гонял C с каждым сообщением

Denis
29.05.2017
12:55:20
вот как только начинаешь больше работать c F[_] понимаешь как неудобны стримы типа акки или моникса
неудобны в плане абстракций
тут блещут pull based штуки

Oleg
29.05.2017
12:56:09
С другой стороны, StateT гипотетически может дофига наоверхедить

Aleksey
29.05.2017
12:56:24

Oleg
29.05.2017
12:56:27
Нужен очень крафтовый State

Aleksei
29.05.2017
12:56:42
Russian Imperial State

Oleg
29.05.2017
12:56:46
Чтобы эффективно работать при всё своём

Alex
29.05.2017
12:57:09
in soviet russia state executes you

Oleg
29.05.2017
12:57:39
повторяешься
in Soviet Russia state transfers you

Denis
29.05.2017
12:57:45
я вот про это

Google

Alex
29.05.2017
12:58:06
шутки про стейт всегда как новые

Denis
29.05.2017
12:58:11
получение следующего куска стрима влечет за собой выполнение эффекта F
и тут уже свобода для творчества неограничена :)

Oleg
29.05.2017
12:58:28
iteratee вон push - based, тот же эффект

Denis
29.05.2017
12:58:58
надо заценить

Alex
29.05.2017
12:59:07
я вот тоже что то засомневался что дело в пушпул

Oleg
29.05.2017
12:59:36
дело в стримах, которые сами себе монада
narcissistream

Андрей
29.05.2017
13:05:41
Ох
Сколько классных вещей вы тут делаете)

Oleg
29.05.2017
13:07:02
Warning: Community Toxicity level is dropping! Fresh repoisoning needed.

Nikita
29.05.2017
13:07:47
Так это, а как в этом примере https://gist.github.com/notxcain/36eb32687b6b7ed83177721746d368a1 быть, например, с упавшей фьючей?
В случае, если в .recover я хочу добавить в контекст сообщение

Oleg
29.05.2017
13:08:54
Сейчас закритикуем критиков. Tinkoff strikes back.

Alexey
29.05.2017
13:09:09
?

Vladimir
29.05.2017
13:10:59
MonadError, сдается мне

Diemust
29.05.2017
13:11:37
у нас тут дублирование обсуждений на хабре?)

Oleg
29.05.2017
13:14:17

Denis
29.05.2017
13:17:45

Google

Denis
29.05.2017
13:18:02
только MTL тайпклассы в кэтс невозможно юзать
точнее можно если он у вас один

Evgeniy
29.05.2017
13:18:46
а вчем причина невозможности?

Denis
29.05.2017
13:18:51
иначе F[_]: MonadError: MonadReader будут конфликтовать за implicitly[Monad[F]]
они оба extends Monad[F]

Evgeniy
29.05.2017
13:19:41
а через тот трюк что newts делает нельзя?

Denis
29.05.2017
13:19:53
да трюков полно

Evgeniy
29.05.2017
13:21:12
https://julien-truffaut.github.io/newts/
я не пробовал, просто интерисуюсь

Alex
29.05.2017
13:22:37
интересно теги а-ля https://github.com/Treev-io/tagged-types тут помогли бы?

Denis
29.05.2017
13:25:45

Evgeniy
29.05.2017
13:28:30
я правильно понял?
- т.е если у нас есть cтек монад типа как в хаскелле:
newtype M a = M (ReaderT Environment (StateT State IO) a)
deriving (Functor, Applicative, Monad)
то в случае котов у нас нет возможности эти конфликты поиска имплиситов разрешить?

Nick
29.05.2017
13:30:28
@optician_owl видел https://apacheignite.readme.io/docs/machine-learning ?

Daniel
29.05.2017
13:31:21

Nick
29.05.2017
13:31:27
?
@optician_owl думаешь не стоит тащить это к вам?)

Denis
29.05.2017
13:31:51
@strobegen
Вот вся проблема в одной строчке
def foo[F[_]: Applicative: Monad] = implicitly[Functor[F]]

Daniel
29.05.2017
13:32:04
я уверен, что не стоит тащить все подряд без необходимости)
но риск такой есть

Alexey
29.05.2017
13:34:22
> def foo[F[_]: Applicative: Monad] = implicitly[Functor[F]]
мне аж больно стало

Google

Oleg
29.05.2017
13:37:04

Denis
29.05.2017
13:38:49
#MTLexit

Oleg
29.05.2017
13:39:08
в новой scalaz есть такой подход
trait MonadReader[F] {
type S
implicit def monad: Monad[F]
}```вместо
```trait MonadReader[S, F] extends Monad[F]

Denis
29.05.2017
13:39:59
я вот только не понимаю зачем там вообще нужна монада?
для laws ?
если для реализации каких то методов у тайпкласса то я бы передавал в имлиситах лучше
trait MonadFoo[F[_]] {
def foo: F[Int]
def bar(i: Int): F[Unit]
def foobar(implicit F: Monad[F]): F[Unit] = F.flatMap(foo)(bar)
}
типа того

Oleg
29.05.2017
13:42:12

Evgeniy
29.05.2017
13:42:57

Denis
29.05.2017
13:43:26
я просто наоборот вижу это как строительные блоки возможностей F[_], типа`Monad[F] - последовательные вычисления, `Stateful[F] - управление состоянием вычисления

Oleg
29.05.2017
13:44:10
т.е. TC1 ⊂ TC2 или TC1 implies TC2

Denis
29.05.2017
13:44:35
да, я понял тебя, просто профита не вижу. Может это в скале так, в хаскелл не нырял

Oleg
29.05.2017
13:46:48

Evgeniy
29.05.2017
13:47:27

Oleg
29.05.2017
13:48:58

Denis
29.05.2017
13:49:35
trait Pure[F[_]] { def pure[A](a: A): F[A] } ?
def fubar[F[_]: Pure: FlatMap]