@scala_ru

Страница 1498 из 1499
λoλcat
03.06.2018
15:47:40
cats.implicits.catsParallelForEitherTNestedValidated[cats.effect.IO, Unit]( effect.this.IO.ioEffect, cats.implicits.catsKernelStdAlgebraForUnit )

Aleksei
03.06.2018
15:47:46
а айзеТ спецом нужен?

λoλcat
03.06.2018
15:47:56
cats.implicits.catsParallelForEitherTNestedParallelValidated[cats.effect.IO.Par, cats.effect.IO, Unit]( cats.implicits.catsKernelStdAlgebraForUnit, effect.this.IO.ioParallel(effect.this.IO.timer(scala.concurrent.ExecutionContext.Implicits.global))) );

Aleksei
03.06.2018
15:48:01
там же под идее аттемп можно сделать

Google
λoλcat
03.06.2018
15:49:47
а айзеТ спецом нужен?
как раз благодаря ему и срабатывает этот эффект молчаливого вывода не того параллела

без трансформера program1 ругнулся бы на отсутствие в скоупе глобал экзекьюшенконтекста

Aleksei
03.06.2018
15:51:14
а если внутри шифтить ио?

Oleg
03.06.2018
15:58:01
Саммоню Олега @odomontois
Что. Новому. Хозяину . Нада

λoλcat
03.06.2018
16:10:18
Что. Новому. Хозяину . Нада
Сорри за саммон. Лишь мнение. Вывод Parallel похоже стремная штука

Пока не понял, это баг cats-core, cats-effect или scalac

Моникс кстати ведет себя корректно

Oleg
03.06.2018
19:04:24
кек, стрёмно, что он тебе для EitherT вывел не тот параллел?

добавь к аргументам дегуза за BIO

λoλcat
03.06.2018
19:27:43
я разобрался как он выводил

могу написать, если интересно кому-то

кроме меня

Google
Grigory
03.06.2018
19:28:32
пиши

λoλcat
03.06.2018
19:47:41
Под синтаксическим сахаром .parMapN для тюпла скрывается функция в Parallel: def parMap2[M[_], F[_], A0, A1, Z](m0:M[A0], m1:M[A1])(f: (A0, A1) => Z)(implicit p: NonEmptyParallel[M, F]): M[Z] Эта функция параметризована M и F, и если их явно указать, то конечно все будет работать как надо или не компилироваться вообще. type M[A] = EitherT[IO, Unit, A] type G[A] = Validated[Unit, A] type F[A] = Nested[IO.Par, G, A] val program = Parallel.parMap[M, F, Unit, Unit, Unit](ioA, ioB) { (_, _) => () }Тут я явно указал IO.Par, что весьма дико. Никто естественно указывать тайп-параметры не хочет и положится на автовывод. Компилятору надо найти имплисит p: NonEmptyParallel[M, F], не зная F. Напомню, что мы ищем имплисит для параллелизации EitherT. Лезем в cats.instances.ParallelInstances (который extends ParallelInstances1), там есть вот такой имплисит: implicit def catsParallelForEitherTNestedParallelValidated[F[_], M[_], E: Semigroup] (implicit P: Parallel[M, F]): Parallel[EitherT[M, E, ?], Nested[F, Validated[E, ?], ?]] Он выведется, есть найдется Parallel[M, F] для IO. Что нужно для вывода Parallel для IO: implicit def ioParallel(implicit timer: Timer[IO]): Parallel[IO, IO.Par]И далее: implicit def timer(implicit ec: ExecutionContext): Timer[IO] Так что, если не будет в скоупе ExecutionContext, вся эта цепочка не сработает и будет фолбэк на инстансы для EitherT внутри менее приоритетного ParallelInstances1. Там лежит имплисит послабее, который от внутренней монады не требует инстанса Parallel: implicit def catsParallelForEitherTNestedValidated[M[_]: Monad, E: Semigroup]: Parallel[EitherT[M, E, ?], Nested[M, Validated[E, ?], ?]]

Grigory
03.06.2018
19:49:02
Шерлок прям

λoλcat
03.06.2018
19:53:19
Надо было и правда брать бифунктор.

от Луки

M
03.06.2018
20:26:24
Хбокс говно. Только плейстейшон.
там вроде кто то про 18 маг инфы наворовал что 32 гига оперативы 4к моник и другие вкусности

Юрий
03.06.2018
23:57:42
Они до сих пор не исправили? Уныние
Ну там ест воркэраунды, но все они довольно костяльные, типа рестарта пульсаудио

А есть у кого книжка Learning Concurrent Programming in Scala? Исключительно для ознакомления

Aleksey
04.06.2018
05:59:18
Ищем докладчиков на ближайший московский Scala-митап. Писать мне в личку или на aleksey.fomkin@gmail.com. Даты и место проведения уточняются. Не ленитесь, готовьте доклад! Не стесняйтесь агитировать друзей и коллег!

Alexey
04.06.2018
07:17:45
А в ништяках очепятка сама не поправилась ?

Grigory
04.06.2018
07:24:49
что попало в ништяки то там и осталось

Nick
04.06.2018
07:28:48
блокчеин

Сергей
04.06.2018
11:57:15
Есть два метода def fn[T](x: T): String = ??? def fn[T](x: T*): String = ??? Есть ли способ как-то указать компилятору, что fn(1) относится только к первому методу, а не ловить ошибку?

Сергей
04.06.2018
11:59:54
благодарю, должно помочь

Eugene
04.06.2018
12:07:45
Скажите пжлста monix.Task.apply запускает вычисление в отдельном потоке, окей а если делать через Effect[Task].delay/pure/point то никак не получается - выполнение запущенных эффектов происходит последовательно

какой метод в Effect эквивалентен executeAsync?

λoλcat
04.06.2018
12:17:38
Мне кажется Task.apply ничего не запускает

Google
λoλcat
04.06.2018
12:17:59
В мониксе свой scheduler fairness механизм

В котах надо явно ставить асинк баундари

Eugene
04.06.2018
12:19:08
ну вот сейчас я запустил 2 таска через Task{} и сделал Task.gatheUnrodered и они запустились параллельно

а если абстрагироваться из запускать через Effect[Task] то таски выполняются последовательно

Oleg
04.06.2018
12:20:03
Полагаю, чтобы удовлетворить лолкота, нужно заменить "запускает" на "планирует" или "конструирует"

Eugene
04.06.2018
12:20:21
получается сделать только если явно указать Effect[Task].executeAsync но видимо я что-то делаю не так

λoλcat
04.06.2018
12:20:55
Oleg
04.06.2018
12:21:18
Eugene
04.06.2018
12:21:26
хм

Oleg
04.06.2018
12:21:28
Для этого есть Concurrent

Eugene
04.06.2018
12:21:40
COncurrentEffect?

Oleg
04.06.2018
12:22:01
COncurrentEffect?
Ну это объединение тех двоих, можно его

Eugene
04.06.2018
12:22:10
да смотрю его

Oleg
04.06.2018
12:22:43
Если совсем выхода нет, Можно и через эффект, но грязно через конвертацию в IO и обратно

Но лучше взять ad hoc тайпкласс

Eugene
04.06.2018
12:23:19
а явно написать Effect[Task].point("ololo").executeAsync это коряво?

Oleg
04.06.2018
12:24:20
Не знаю ни одной задачи, для которой нужно в мониксе саммонить что-то

Кроме какого-то метода в Timer

Google
Eugene
04.06.2018
12:25:38
Не знаю ни одной задачи, для которой нужно в мониксе саммонить что-то
возможно оверинжиниринг, но часть кода захотелось отвязать от конкретного эффекта

чтобы везде не указывать явно Task, а работать через тайпклассы

да спасибо я понял про Concurrent, открыл для себя новый тайпкласс )

Aleksei
04.06.2018
12:26:12
В Effect нет логики "параллельности/конкуретности"
а почему тогда Effect экстендит Async?

Admin


Oleg
04.06.2018
12:26:29
а почему тогда Effect экстендит Async?
Потому что он асинхронный

Асинхронный != конкурентный

Aleksei
04.06.2018
12:26:52
всё понял

Eugene
04.06.2018
12:27:18
Засаммонив Effect[Task] ты не отвязался от Task
ну как-же, я с таким же успехом могу и Effect[IO] и еще что-то засунуть

Oleg
04.06.2018
12:27:47
ну как-же, я с таким же успехом могу и Effect[IO] и еще что-то засунуть
Кек. Надо писать эф с дыркой двоеточие тырыпыры

Спроси у Ника

Eugene
04.06.2018
12:29:55
Кек. Надо писать эф с дыркой двоеточие тырыпыры
да так и есть abstract class ExternalProcessor[F[_]](implicit eff: Effect[F]) { и уже не используется Task напрямую

Alexey
04.06.2018
14:08:35
Коль уж пошла такая пьянка, мы также ищем докладчиков на ближайший митап в Санкт-Петербурге, присылайте свои темы в личку мне, @nikitamelnikov или @rockjam

@pomadchin @gurinderu в ништяки плез ^

Grigory
04.06.2018
14:10:08
готово

Alexey
04.06.2018
14:10:40
?

Alexey
04.06.2018
14:14:08
Точных дат еще нет

Google
Denis
04.06.2018
15:11:29
https://twitter.com/scala_lang/status/1003639318836105217

Mikhail
04.06.2018
15:20:29
Добрый вечер, можно попросить вас о подсказке в Gatling? Есть сценарий следующего вида val someScenario: ScenarioBuilder = scenario("someSimulation") .exec(action0.silent) .exec(action1.silent) .exec(action2.silent) .exec(action3.silent) .exec(action4) .asLongAs(session => session("status").as[String] != "Completed") { exec(action4) pause(5.seconds) } } action4 получает status и сохраняет его значение в сессию При помощи чего можно пробросить это значение внутрь блока asLongAs?

Anton
04.06.2018
15:42:32
А это значение потом опять используется в action4 внутри блока? Давненько я не видел Гатлинга, но по идее, если это в рамках одного юзера происходит (т.е. считай в рамках одной сессии), то и внутри блока можно все из сессии вытащить, если exec{session=>...} вызвать

Евгений
04.06.2018
16:44:55
подскажите, как правильно делать конверсию scala->java коллекций?

scala.collection.JavaConverters._ дает type mismatch

Grigory
04.06.2018
16:45:47
В данном случае тебе надо примитивы кастить в джава тип

Евгений
04.06.2018
16:46:03
ага.

Grigory
04.06.2018
16:46:32
ты я так понимаю хочешь из джавы колл сделать?

явно укажи в скала коде что хочешь лонг жавовый

Евгений
04.06.2018
16:46:55
не, просто пишу обертку к java-апи

Grigory
04.06.2018
16:49:06
Эс инстанс тут нужен, компайл тайм ошибка, в рантайме лонги одинаковые

Мапнись ._. Не уверен что есть лучше способ

Aleksei
04.06.2018
16:55:42
ну можно ж имплиситами =)

Mikhail
04.06.2018
16:55:45
подскажите, как правильно делать конверсию scala->java коллекций?
лучше покажи код, который к этому привел. что-то не укладывается в голове метод который принимает скаловую коллекцию, но при этом просит в сигнатуре именно java.lang.Long

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