
Alexander
27.04.2017
14:07:04
gist поправлен

Oleg
27.04.2017
14:07:06
в нашем токсичном коммьюнити, ты не можешь просто придти и спросить помощь

Alexander
27.04.2017
14:07:26
ага, чтобы какой-нибудь фанатик не прилип :)

Oleg
27.04.2017
14:07:26
сначала ты выслушаешь, почему ты не прав

Google

Alexander
27.04.2017
14:08:52
мб Майлс не прав, что создаёт объект каждый раз, ведь вся задумка в тэгах на уровне типов, а у него new Tagger - WTF?

Oleg
27.04.2017
14:09:31
у майлза не создаётся объект каждый раз
там тот же самый asInstanceOf в refined тип

Vitalii
27.04.2017
14:10:58
аху*нный ответ
есть еще варинты ?)
If we are writing code in scala, it would be better to write the code which will use the language to its best.
Moreover, I don't think pattern matching will make the code unreadable rather, it will make it more compact and readable

Alexander
27.04.2017
14:11:48

Oleg
27.04.2017
14:12:26
https://github.com/milessabin/shapeless/blob/master/core/src/main/scala/shapeless/typeoperators.scala#L25

Alexander
27.04.2017
14:12:47
да, я выше это скопировал

Oleg
27.04.2017
14:13:16
ну там не создаётся ни одного нового объекта
ааа хотя я понял тебя

Alexander
27.04.2017
14:13:44
tag(a) - это вызов метода apply, который делает new Tagger[U], а потом у того вызов apply с передачей a

Oleg
27.04.2017
14:14:01
да, получается, что нужно писать
val Something = tag[Something]
и потом Something(x) - вот здесь точно не будет новых инстансов

Alexander
27.04.2017
14:15:34
угу, наверное так и задумано, но мне больше нравится "Sheldon Cooper".@@[Username], где trait Username

Google

Alexander
27.04.2017
14:15:53
и в параметрах методов (name: String @@ Username)

Oleg
27.04.2017
14:16:17
ну наверное, смотря на область применения
если теги - это для какого-то DI, лучше да, но если в scalaz стиле, где теги - это a la newtype

Alexander
27.04.2017
14:18:17
у нас сейчас в моделях сплошные extends AnyVal, хотим от них уйти на тэги после прочтения этой статьи: https://failex.blogspot.co.uk/2017/04/the-high-cost-of-anyval-subclasses.html?view=sidebar

Oleg
27.04.2017
14:18:27
тогда скорее
type Sum[A] = A @@ Summing
val Sum = tag[Summing]
implicit def sumMonoid[A: Numeric] : Monoid[Sum[A]] = ???
ааа прости, не понял ссылки
ну вот даже по примеру миграции
получается, твой синтаксис требует переписывать Label(str) в str.@@[Label] в то время, как вызов функции работает с тем же синтаксисом

Alexander
27.04.2017
14:28:29
за счёт инференса - да
как насчёт https://gist.github.com/Tvaroh/a2fd772f7a66aaafc2ea48ce1fc3646d ?

Oleg
27.04.2017
14:40:33
а юзкейз какой у taggingExtensionsF ?

Alexander
27.04.2017
14:42:39
List[String] -> List[String @@ Username]

Oleg
27.04.2017
14:52:37
кстати, получается, что в случае композиции таких обёрток, вы можете получить несовместимый с AnyVal код
Т.е.
Foo[Bar[A]] =:=
A {type Tag <: FooTag with BarTag} =:=
A{type Tag <: BarTag with FooTag} =:=
Bar[Foo[A]]

Alexander
27.04.2017
14:57:19
будем изо всех сил стараться не обосраться :) благодарю за содействие

Oleg
27.04.2017
14:57:47
да не, я же тоже думаю себе такое сделать
вот надо найти подводные камни
К примеру BTreeSet[A : Order]
и какой-нибудь BTreeSet[Down[A]], где элементы будут в обратном порядке

Google

Oleg
27.04.2017
14:59:32
как-то интересно можно сделать аналог type role в scala

Alexander
27.04.2017
15:03:05
я сегодня-завтра попримеряю это дело на существующий код - там видно будет, может что-то выкину

Oleg
27.04.2017
15:03:56
хотя точн!... Leibniz - это же и есть Coerce

Alexander
27.04.2017
15:07:50
ты слишком много знаешь
Oleg нашёлся отличный кейс для @@@ (это объявление Encoder+Decoder для Circe):
implicit def taggedEncoderDecoder[T: Encoder : Decoder, U]: EncoderDecoder[T @@ U] =
EncoderDecoder.instance(_.asJson, _.as[T].@@@[U])
Для value classes для каждой модельки приходилось писать свой отдельный бойлерплейт.

Oleg
27.04.2017
15:42:36
т.е. ты сэкономил на создании одного инстанса Right
ну неплохо уже, неплохо
правда, зачем тогда нужны теги, если все затеганные типы имеют такой же формат, как оригинал

Alexander
27.04.2017
15:44:26
для type safety
определить кастомный encoder и т.п. всегда можно

Oleg
27.04.2017
15:45:03
конечно, можно это в LowLevel, а в более приоритетный написать свой

Alexander
27.04.2017
15:45:15
угу

Oleg
27.04.2017
15:47:37
правда, я тебя разочарую, при таком подходе у тебя на каждый вызов encode\decode будет заново генерироваться новый инстанс формата для врапленного типа, даже если у оригинального типа encoder\decoder был кеширован в val
т.е. синаксис - да, но я бы всё-таки не делал это имплиситом

Alexander
27.04.2017
15:49:51
да, лучше бы их конечно кэшировать
я лишь @@@ хотел продемонстрировать
можно прикрутить что-то потипу Scalaz Memo
упс https://github.com/circe/circe/issues/604

Aleksey
27.04.2017
16:41:00
Фоточки тут с вчерашнего митапа разбираю

Google

KrivdaTheTriewe
27.04.2017
16:41:50
датафрейм держи

Dmitry
27.04.2017
16:47:27
Коллеги, хочу абстрагироваться от Task
https://gist.github.com/zuynew/a150304d0949dbcc4a5d13ee475f1ca7
есть такой код
и никак не могу понять как застаивть исполняться таск в отдельном тредпуле
если абстрагируешься от M[_]: Async

Admin
ERROR: S client not available

Dmitry
27.04.2017
16:54:17
class AB[M[_]](f: Int => M[Int])(implicit val F: Async[M]) {
def calc() = Stream.emit(1).evalMap(x => F.start(f(x))).evalMap(x => x).runFold(0){_ + _}
}
так работает
но как то это не оч

Alexander
27.04.2017
17:42:09
это что за Task, Scalaz?

Dmitry
27.04.2017
17:47:55
Да вроде уже справился
Ваще fs2

KrivdaTheTriewe
27.04.2017
17:53:46
тут про спарк говорят , а ты не пошел
правда они все на питоне делают
им проще коммитить в Спарк , чем на скале писать

Grigory
27.04.2017
17:56:38
Мнe б рассказали там за жизнь за датафрeймы

Andry
27.04.2017
18:23:54
Они боятся жопы на скале, потому пишут пайспарке...

KrivdaTheTriewe
27.04.2017
18:26:22
но что порадовало , вокруг них может сложиться Спарк тусовка рф

Alex
27.04.2017
19:20:53
вокруг кого?

Google

Grigory
27.04.2017
19:25:10
а как овкруг них спарк тусовка сложится елси они на питоне пишут

Cyrillos
27.04.2017
19:27:41
парни, нужно слушать некий api-url, по которому будут приходить обновления в json формате. Посоветуйте long polling либу для этой цели?

KrivdaTheTriewe
27.04.2017
19:32:29

Oleg
27.04.2017
19:34:07

Cyrillos
27.04.2017
19:34:38
Oleg Спасибо

Alexander
27.04.2017
19:36:13
Интересную штуку на SOF придумали http://stackoverflow.com/documentation/scala

Alex
27.04.2017
19:46:25
похоже на очередное вики
только с голосованием

Alexander
27.04.2017
19:58:28
Угу. Я надеюсь что там народ тусить будет.
А, ну и формат обновлённый. В вики, всё-таки, воды много, как правило.

Andry
28.04.2017
06:02:08

Wystan
28.04.2017
06:46:49
Но там убогий скаладсл
Например там интерполяция строк своя, нету тест хелперов, типы между процессорами не проверяются, короче типичный джава фреймворк
http://stackoverflow.com/documentation/scala/4112/monads/14338/monad-definition
Хотел дописать про аппликативы функторы и все такое, но поленился ;(

Andry
28.04.2017
06:51:36