@scala_ru

Страница 707 из 1499
Google
Denis
29.05.2017
12:42:00
я думал это про блоки и мух от котлет )

Alexey
29.05.2017
12:42:38
кто в итоге сверху? гусь или монады?
мне не понравилось ни одно решение из предложенных. ему я как понял тоже :)

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: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
тут блещут pull based штуки
В мониксе Task вроде бы пуллбэйзд

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
В мониксе Task вроде бы пуллбэйзд
https://github.com/functional-streams-for-scala/fs2/blob/series/0.10/core/shared/src/main/scala/fs2/Stream.scala#L64

я вот про это

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
https://julien-truffaut.github.io/newts/
нет, это не поможет в этом случае

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
@optician_owl видел https://apacheignite.readme.io/docs/machine-learning ?
я надеюсь это коллеги не увидят

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
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
я вот только не понимаю зачем там вообще нужна монада?
как требование, чтобы выразить включение между тайпклассами

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
да, я понял тебя, просто профита не вижу. Может это в скале так, в хаскелл не нырял
ну у тайпклассов есть minimal complete definition, и те методы, что в него не входят, иногда подразумевают реализацию с помощью методов требуемого тайпкласса

Evgeniy
29.05.2017
13:47:27
https://github.com/typelevel/cats/issues/1616
вроде бы планируют в 1.0.0-MF - так, что наверное скоро уже

Oleg
29.05.2017
13:48:58
да, я понял тебя, просто профита не вижу. Может это в скале так, в хаскелл не нырял
плюс Monad = Applicative with FlatMap, вот как бы ты настэкекал эффекты так, чтобы у тебя был непротеворечивый pure

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

def fubar[F[_]: Pure: FlatMap]

Страница 707 из 1499