
Konstantin
22.08.2018
13:51:02

Alexey
22.08.2018
13:51:26

Bogdan
22.08.2018
13:51:59

Alexey
22.08.2018
13:52:35

Google

Quantum Harmonizer
22.08.2018
13:55:15
Для чего либу писал?
— для запуска сервисов в ведроиде
— для реактивщины
— для обкладывания костылями андроид-фреймворка
— для круд-админки на сайте
— коллекции
— авторизация в андроид-приложении через ВК
— для Gson, чтобы он не игнорил конструкторы
— для валидации ввода в андроиде
мб чо забыл

Alexey
22.08.2018
13:55:59
А ну это всё конкретика без абстракций)

Mikhail
22.08.2018
13:57:00
со странной сигнатурой

Quantum Harmonizer
22.08.2018
13:57:13
его у меня просто нет, хотя несложно сделать и планируется

Mikhail
22.08.2018
13:57:34
ну как не flatMap?
а
стоп
это zipWith

Quantum Harmonizer
22.08.2018
13:58:29
ну как не flatMap?
flatMap при каждом изменении this подписывается на обзёрвабл, возвращённый функцией
а тут у меня нет функции)

Google

Mikhail
22.08.2018
13:59:14
я бы переименовал, все-таки zip устоявшаяся штука, даже в RxJava

Quantum Harmonizer
22.08.2018
14:00:00

Mikhail
22.08.2018
14:00:53
kotlin.collections
java.Stream
и т.д.

Quantum Harmonizer
22.08.2018
14:01:20
понял, спасибо

Bogdan
22.08.2018
14:10:35

Quantum Harmonizer
22.08.2018
14:11:31

Alexey
22.08.2018
14:19:08
Ну вообще сигнатура примерно такая
fun <A, B> List<A>.zip(other: List<B>): List<Pair<A, B>>

Mikhail
22.08.2018
14:19:11
объединить две штуки в одну, типа apple.zipWith(pen): Pair<Apple, Pen>
Кстати, вот тут такая штука, что zip обычно обьединяет попарно, т.е. zip([1,2,3], [а,b]) вернет [(1,а), (2,b)]
А у тебя судя по коду, mapWith возвращает [(1,а),(2,b),(3,b)]

Alexey
22.08.2018
14:19:23
Вместо лист любой тип с параметром

Quantum Harmonizer
22.08.2018
14:20:46
Кстати, вот тут такая штука, что zip обычно обьединяет попарно, т.е. zip([1,2,3], [а,b]) вернет [(1,а), (2,b)]
А у тебя судя по коду, mapWith возвращает [(1,а),(2,b),(3,b)]
у меня не лист)
да, это похоже на combineLatest

Mikhail
22.08.2018
14:24:30

Quantum Harmonizer
22.08.2018
14:25:11

Mikhail
22.08.2018
14:25:49

Quantum Harmonizer
22.08.2018
14:29:02
Все равно значения дискретные
Вот, допустим, синтетический пример.
val left = propertyOf(0)
val right = propertyOf(0)
val stereo = left.mapWith(right, ::Pair)
stereo.addChangeListener { _, _, (l, r) ->
audioDevice.setSamples(l, r)
}
launch {
left.value = nextSample(leftFile)
delay(1.0 / leftFile.sampleRate) // 44 100 Hz
}
launch {
right.value = nextSample(rightFile)
delay(1.0 / rightFile.sampleRate) // 48 000 Hz
}

Alexey
22.08.2018
14:30:07
Ну это по сути zipWithMap
А вот это left.mapWith(right, ::Pair) - это вообще просто zip, так как
zipWithMap(a, b, ::Pair) == zip(a, b)
И вот если бы у тебя были систематические знания то обозвал бы всё это как заведено :)

Quantum Harmonizer
22.08.2018
14:34:55

Google

Alexey
22.08.2018
14:35:11
Можно поботать теор кат
Меня спасли либы вроде cats и arrow, по ним изучил все эти законы
Теор катом универ обделил

Mikhail
22.08.2018
14:39:00

Alexey
22.08.2018
14:51:50
ну почему ж нет. Их же можно эмулировать
Кстати а как это вообще выглядеть в коде будет
Например как на arraow записать что то подобное?
def twice[F: Functor](value: F[Int]): F[Int] = Functor[F].map(value, _ * 2)

Mikhail
22.08.2018
15:10:45
там функтор имеет такой интрефейс
interface Functor<F> {
fun <A, B> Kind<F, A>.map(f: (A) -> B): Kind<F, B>
}
а значит вроде как fun twice(value: Functor<F>) : Kind<F, Int> = value.map { it * 2} должно сработать
но я тот еще луркер, на arrow не писал, только смотрел документашку/семплы/презы
ещще не чувствую, что накопил критическую массу теории чтобы понимать, что делать с этим

Alexey
22.08.2018
15:17:22
А во есть дока
https://arrow-kt.io/docs/patterns/polymorphic_programs/
Хреново конечно, что надо использовать всякие OptionOf

Mikhail
22.08.2018
15:21:12
ну да, и кодогенерация - та еще штука

Alexey
22.08.2018
15:23:04

Konstantine
22.08.2018
15:27:36

Nameless
22.08.2018
15:27:43

Alexey
22.08.2018
15:28:49
И все живы

Konstantine
22.08.2018
15:29:09
Если она локальная - то может и нормально.

Bogdan
22.08.2018
15:30:17

Nameless
22.08.2018
15:30:45

Mikhail
22.08.2018
15:35:00

Google

Nameless
22.08.2018
15:35:56
инетресно на котлине

Alexey
22.08.2018
15:37:18

Mikhail
22.08.2018
15:37:32

Va
22.08.2018
15:39:21
Ребят, есть инфа, когда SAM для котлиновых интерфейсов завезут ?

Quantum Harmonizer
22.08.2018
15:40:42

Mikhail
22.08.2018
15:41:20

Alexander
22.08.2018
15:41:47
Почитал я эту дискуссию и полез все-таки смаотреть, что такое Type классы (первые три раза я отразился от терминологии). Поковоярял, поковырял и обнаружил, что я их оказывается давно использую в kmath для определения математических операций.

Quantum Harmonizer
22.08.2018
15:41:58

Admin
ERROR: S client not available

Alexander
22.08.2018
15:42:04
По крайней мере в том виде, в котором они сейчас есть в arrow

Vladimir
22.08.2018
15:43:28

Mikhail
22.08.2018
15:43:45

Alexander
22.08.2018
15:43:55
этот

Quantum Harmonizer
22.08.2018
15:44:03

Alexander
22.08.2018
15:44:26
Там операции над полями и пространствами опрделены таким образом

Andrew
22.08.2018
15:44:40

Alexander
22.08.2018
15:44:51
Хто?

Mikhail
22.08.2018
15:45:05
этот
Ога, один в один считай

Alexander
22.08.2018
15:45:07
Я физик если что, я от переизбытка математических терминов сам взрываюсь
Просто Keep по тайп классам написан так, что вообще ничего понять невозможно

Google

Vladimir
22.08.2018
15:45:38

Andrew
22.08.2018
15:46:12

Mikhail
22.08.2018
15:47:05

Alexander
22.08.2018
15:47:18
Не понял. Это вроде проблема с шаблонами. Если шаблонов нет, то и проблемы нет. Мы всегда оперируем очень ограниченным количеством типов

Mikhail
22.08.2018
15:47:46
не очень понятно, какой понт вводить ключевые слова в двух точках, если все то же самое легко делается хитрым dsl (это я про KEEP-87)

Alexander
22.08.2018
15:48:42
Мне сильно нехватает возможности вводить расширения с двумя ресиверами. В смысле чтобы определять контекстное расширение не внутри класса а как расширение. Если бы это было, все остальное вообще не нужно

Alexey
22.08.2018
15:49:23
Не знаю как это обозвать

Alexander
22.08.2018
15:52:12
Это палка о двух концах. Когда я математикас большим количеством теоретических знаний начинаю объяснять банальные вещи типа систем сборки, они подвисают насмерть

Mikhail
22.08.2018
15:53:50

Alexander
22.08.2018
15:54:42
Это просто расширение которое видно только когда ресивером является определенный объект.

Quantum Harmonizer
22.08.2018
15:54:44

Alexander
22.08.2018
15:54:55

Quantum Harmonizer
22.08.2018
15:55:11
это только в DSLах всякких нужно, на пределе языковых возможностей)

Alexander
22.08.2018
15:55:15
Очень мощная штука

Quantum Harmonizer
22.08.2018
15:55:22
вот в Anko есть member extension functions

Alexander
22.08.2018
15:56:25
Вообще, суть в том, что оно уже есть. Просто синтаксиса для него нет
А как в Anko это сделано если язык не позволяет?

Mikhail
22.08.2018
15:57:09
На самом деле можно такое сделать через class XDecorator(x: X) определяющий экстеншены

Alexander
22.08.2018
15:57:38
Да, я сейчас примерно так и делаю