@scala_ru

Страница 629 из 1499
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
ну в shapeless обычно просто x: A @@ X = tag(a)
Разве это не x: A @@ X = tag.apply.apply(a)

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]]

List[String] -> List[String @@ Username]
это может быть опасно иногда, наверное, нужно что-то вроде Coerce из хаскелл для уверенности

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
а как овкруг них спарк тусовка сложится елси они на питоне пишут
они сказали, что иногда приходится скалу использовать. Но вообще типа а вокруг кого еще (((

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
Угу. Я надеюсь что там народ тусить будет.

А, ну и формат обновлённый. В вики, всё-таки, воды много, как правило.

Wystan
28.04.2017
06:46:49
Но там убогий скаладсл

Например там интерполяция строк своя, нету тест хелперов, типы между процессорами не проверяются, короче типичный джава фреймворк

А, ну и формат обновлённый. В вики, всё-таки, воды много, как правило.
Поставь мне там лайков за определение монадки плиз ;)

http://stackoverflow.com/documentation/scala/4112/monads/14338/monad-definition

Хотел дописать про аппликативы функторы и все такое, но поленился ;(

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