@scala_ru

Страница 300 из 1499
KrivdaTheTriewe
11.12.2016
20:55:20
а кто отжимает?

на котлине по факту никто не пишет

а стартапов где скала используется всё больше и больше

Google
Semyon
11.12.2016
20:59:08
Сам видел

Viacheslav
11.12.2016
23:02:48
всем привет, объясните плиз на пальцах чо происходит. http://pastebin.com/6ahjefvW Смотрим TreeSet lookup элемента происходит за log http://docs.scala-lang.org/overviews/collections/performance-characteristics.html спрашивается, что сложного запилить метод find который бы требовал логарифмическое время на поиск элемента. Какова хрена там линейное время?

сам допер: непонятно по какому полю я буду искать, поэтому метод find не может искать по сортированному полю в общем случае

Vyatcheslav
12.12.2016
03:24:33
господи, ну сколько можно… На мой взгляд тут нарисованы лезбиянки. Одна одевается как мужчина + 2 одеваются как "обычные" женщины. Меня лично это не уязвляет, а вот тех, кого это действительно уязвляет - подумайте над этим. Не хорошо быт ь гомофобом (а-та-та)

Denis
12.12.2016
08:59:38
Как думаете использовать ненаселенные типы в качестве контекста к type class это плохо пахнет? ) Например trait Encoder[Context, A] { def encode(a: A): Array[Byte] } class Foo[Context] { def bar[A : Encoder[Context, ?]](a: A) = ??? } Позволяет юзеру сделать несколько инстансов энкодеров для разных мест.

Фактически это тоже самое что разные имена тайпклассов )

type KafkaEncoder[A] = Encoder[ForKafka, A]

sealed abstract class ForKafka без инстансов

Vladimir
12.12.2016
09:02:51
ну ты точно так же мог поидее просто тэгами помечать конкретный тип, для которого нужен енкодер, и выводить разные энкодеры для разных тегов. правда с тегами инференс туповато работает

типа Encoder[Foo @@ ForKafka]

Denis
12.12.2016
09:03:36
да теги тоже вариант конечно

Google
Vladimir
12.12.2016
09:03:46
и теги пришлось бы везде прокидывать. так что с контекстом вроде полаконичнее

Denis
12.12.2016
09:04:22
надо в этом направлени покопать, посмотреть что получится )

Vladimir
12.12.2016
09:04:59
да, интересный подход)) я про теги сказал, что это по сути то же самое. и теги вроде бы народ использует, так что мне не кажется что фантомный контекст это что-то плохое

Denis
12.12.2016
09:05:12
А то у меня есть энкодеры для сохранение событий в журнал (протобаф) и энкодеры для паблишинга в кафку (Json). Вот и хочется нормально сделать

А ) ну да

Vladimir
12.12.2016
09:06:04
а ты кстати снапшоты в журнал тоже в протобуфе кладешь?

Denis
12.12.2016
09:06:31
я пока их не использую

пока нет аггрегатов требующих снэпшотттнг

можно же требовать Encoder[Foo] @@ ForKafka

Что кстати более универсально

так как можно что угодно требовать def foo[Context, F[_], A](implicit f: F[A] @@ Context) = f

foo[ForKafka, Encoder, MyEvent] )

Vladimir
12.12.2016
09:16:39
ну да, выглядит ок)

Denis
12.12.2016
09:28:25
хотя все это сводится к partial appllciation любых типов

Dmitry
12.12.2016
10:14:19
о! пошла жара с аннотациями

а я-то все ждал..

Nikolay
12.12.2016
10:15:16
@@ это же не аннотации

?Ivan
12.12.2016
10:15:25
о! пошла жара с аннотациями
С какими аннотациями? Я их не вижу

Dmitry
12.12.2016
10:15:27
доооо

окей окей :) не аннотации

Google
Dmitry
12.12.2016
10:15:51
тише-тише.

Grigory
12.12.2016
10:15:59
это теги

Dmitry
12.12.2016
10:16:07
ну да :) совсем другое.

Nikolay
12.12.2016
10:16:11
метааннотации

Dmitry
12.12.2016
10:16:16
??

Nikolay
12.12.2016
10:16:28
когда одной @ мало

James Tiberius Kirk ?
12.12.2016
10:16:34
ща вжухи пойдут

Nikolay
12.12.2016
10:16:35
на помощь приходит вторая

Dmitry
12.12.2016
10:17:02
чтоб подчеркнуть что это точно не аннотации

Grigory
12.12.2016
10:17:04
type @@[+T, U] = T with Tagged[U]

Dmitry
12.12.2016
10:17:05
coconut

Grigory
12.12.2016
10:17:06
держите

Denis
12.12.2016
10:17:06
ну да :) совсем другое.
ты жирный тролль ))

Grigory
12.12.2016
10:17:11
кормлю

Denis
12.12.2016
10:17:38
так то все аннотации кроме рантайм значений

?Ivan
12.12.2016
10:19:05
http://www.vlachjosef.com/tagged-types-introduction/

Daniel
12.12.2016
10:35:56
профнепригодный тролль мельчают мифические твари

Aleksey
12.12.2016
10:40:50
http://www.vlachjosef.com/tagged-types-introduction/
В этой теме слегка напрягает две вещи. Во первых совершенно не понятно почему бы тэггинг не вынести в отдельный модуль. Не хочется тянуть шэплес только из за этой фичи на пример. Во вторых напрягает что когда мы делаем tag[User]("aFxtsa1s") инстанцируется новый и совершенно бесполезный экземпляр класса Tagger.

?Ivan
12.12.2016
10:50:49
Вот у меня реально в коде есть куча методов, которые принимают допустим 5 стринговых параметров с разным смысловым контекстом. Хотелось бы их как-то отделить друг от друга, чтобы не ошибиться

Google
Denis
12.12.2016
10:53:23
В шейплесс вроде tag сделаны без лишних аллокейтов

Admin
ERROR: S client not available

Andrey
12.12.2016
10:53:41
А просто case class AccountID(value: String) вообще не вариант?

Aleksey
12.12.2016
10:54:05
И что лучше юзать для этих же целей?
Мне само решение нравится. По крайней мере это лучше чем делали мы у себя в проекте - case class Id[+T](uuid: UUID) extends AnyVal.

Aleksey
12.12.2016
10:55:19
В шейплесс вроде tag сделаны без лишних аллокейтов
https://github.com/milessabin/shapeless/blob/master/core/src/main/scala/shapeless/typeoperators.scala#L26 Когда мы делаем tag[MyType]("myId") делается экземпляр Tagger.

Denis
12.12.2016
10:56:16
А, я вот про это говорил https://github.com/milessabin/shapeless/blob/master/core/src/main/scala/shapeless/typeoperators.scala#L32

но да

можно было сделать через AnyVal

Aleksey
12.12.2016
10:57:00
можно было сделать через AnyVal
Не получится, потому что у энивала должно быть значение в конструкторе.

Denis
12.12.2016
10:57:12
foo: Unit ?

Tager(foo: Unit) extends AnyVal

:)

Dmitry
12.12.2016
10:57:37
?

Aleksey
12.12.2016
10:57:42
Можно было бы переписать как-нибудь типа object tag { private val theTagger = new Tagger[Any] def apply[U] = theTagger.asInstanceOf[Tagger[U]] trait Tagged[U] type @@[+T, U] = T with Tagged[U] class Tagger[U] { def apply[T](t : T) : T @@ U = t.asInstanceOf[T @@ U] } }

Denis
12.12.2016
10:58:14
можно да

Aleksey
12.12.2016
10:59:46
Пойду в жвмчатик спрошу, не заинлайнится ли инстанцирование Tagger уже в рантайме, когда жвм поймет что аллоцировать не имеет смысла.

Aleksey
12.12.2016
11:01:30
А чем решение с тегами лучше-то?
Тем что без оберток. Этот вот UUID @@ User или там String @@ User это прям вот настоящие UUID и String. То есть если у тебя есть функция которая требует UUID тебе не надо будет делать user.id.uuid.

Google
Aleksey
12.12.2016
11:27:06
Если список, то энивалы боксятся

?Ivan
12.12.2016
11:29:09
Что посоветуюте для SOAP клиента?

Grigory
12.12.2016
11:31:33
да только scalaxb есть вроде

Denis
12.12.2016
11:33:34
Если список, то энивалы боксятся
В этом случае ок будет

?Ivan
12.12.2016
11:39:12
да только scalaxb есть вроде
забава в том, что в wsdl тип описан как Int, а по факту посылается Long ? вот с этим scalaxb переварит или нет?

Grigory
12.12.2016
11:40:02
я б на месте scalaxb стековерфлоу кидал) ну попробуй; там протокол сгенерировать дело 5 минут

Dmitry
12.12.2016
12:14:31
а кто-нибудь встречался с проблемой: если есть тип T[A,B] и L <: HList, то implicit ops.hlist.Selector[L, T[A,B]] не находится, даже если явно указано, что L -- это T[A,B] :: T[A, C] :: HNil? при том если тип зависит от одного типа, то всё ок

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