
Sergey
23.08.2017
17:55:59
А мне?(
Дима, не хочешь сделать курс по фп? Или статейку написать)

Дмитрий
23.08.2017
17:57:15
Не уверен, что мне есть пока что рассказать в целой статье)

Sergey
23.08.2017
17:57:16
А то в инете правда инфы мало

Google

Дмитрий
23.08.2017
17:57:25
http://www.tomharding.me/

andretshurotshka?❄️кде
23.08.2017
18:03:07
или видел ?

Sergey
23.08.2017
18:03:29

Дмитрий
23.08.2017
18:03:37

Sergey
23.08.2017
18:04:07
*законспектировал
Т9

Таймураз
23.08.2017
18:05:43
Фак
я тоже хочу упороться по фп, но когда рассказываю о нем на работе, на меня смотрят как на дауна

Дмитрий
23.08.2017
18:07:05
Людьми редко когда движет чистый интерес, им нужны решения проблем
Короче просто рассказывать не употребляя фп терминов вообще)

Sergey
23.08.2017
18:08:16

Таймураз
23.08.2017
18:08:57

Sergey
23.08.2017
18:09:00
А просто функции в функции заворачивать, и так много раз, вроде все умеют

Google

Дмитрий
23.08.2017
18:09:29
Незнание того что Array в js — это функтор с точки зрения FL не мешает пользоваться фичами of и map

Denis
23.08.2017
18:18:07

illiatshurotshka❄️
23.08.2017
18:18:33
как расшифровывается FL?

Sergey
23.08.2017
18:19:41

Denis
23.08.2017
18:20:07
?♂
а зачем полумерами (четвертьмерами) отделываться?

Sergey
23.08.2017
18:20:40

Дмитрий
23.08.2017
18:21:59
Functor
u.map(a => a) is equivalent to u (identity)
u.map(x => f(g(x))) is equivalent to u.map(g).map(f) (composition)

Таймураз
23.08.2017
18:22:17
Чем?)
Переведу- хаскел- основа ФП. Знаешь и умеешь в хаскел- умеешь в фп

illiatshurotshka❄️
23.08.2017
18:22:26
ответьте плс

Denis
23.08.2017
18:22:35
ахуенный функтор arr.map((x, i, o) => ...)

Дмитрий
23.08.2017
18:22:37

illiatshurotshka❄️
23.08.2017
18:23:54
аааа это fantasy land

Sergey
23.08.2017
18:23:56

illiatshurotshka❄️
23.08.2017
18:24:34
лямбда исчисление - основа фп

Denis
23.08.2017
18:25:32
логика - основа ФП

Дмитрий
23.08.2017
18:26:04
Так же и Array и String на пару имплементят Semigroup, например

Google

Sergey
23.08.2017
18:26:36

Дмитрий
23.08.2017
18:27:05
Реализовывать сможешь

Denis
23.08.2017
18:27:19

Дмитрий
23.08.2017
18:27:30
К сожалению, хотелось бы больше пользоваться и меньше — реализовывать)

illiatshurotshka❄️
23.08.2017
18:27:47
на жс невозможно реализовать многие функциональные конструкции

Дмитрий
23.08.2017
18:28:30
Не то чтобы невозможно, просто бодаться тебе с этим придётся самому
В процессе зато можно скипнуться на purescript

Таймураз
23.08.2017
18:30:19

illiatshurotshka❄️
23.08.2017
18:33:34

Sergey
23.08.2017
18:33:39

Дмитрий
23.08.2017
18:36:22

Дмитрий
23.08.2017
18:36:59
Меня в качестве цели вполне устраивает purescript

Sergey
23.08.2017
18:37:07
Неа
Будешь мучаться с фп на жс?

Дмитрий
23.08.2017
18:37:19
По крайней мере я могу извлечь профит из его использования моментально

Sergey
23.08.2017
18:38:20

illiatshurotshka❄️
23.08.2017
18:43:17

Дмитрий
23.08.2017
18:44:24

Sergey
23.08.2017
18:44:52

illiatshurotshka❄️
23.08.2017
18:44:58
а потом оказывается что у языка для этого есть null

Google

Дмитрий
23.08.2017
18:45:29

illiatshurotshka❄️
23.08.2017
18:45:45
ой
это option

Дмитрий
23.08.2017
18:47:43

Sergey
23.08.2017
18:49:09

Admin
ERROR: S client not available

Denis
23.08.2017
18:50:09
аж кровь из глаз пошла) я давно понял, лучше взять ghcjs + closure compiler + ghc optimization

Дмитрий
23.08.2017
18:51:02
И кстати что там оптимизировать?) Либа выдерживает уровень скорости близкий к максимальному

illiatshurotshka❄️
23.08.2017
18:53:32
От чего?
от таких костылей ради фич которые должны быть в самом языке

Denis
23.08.2017
18:53:41

Дмитрий
23.08.2017
18:57:02
https://github.com/zerobias/telegram-mtproto/blob/b8309013ba777dddc49dd48576d53557a630b47e/packages/telegram-mtproto/src/state/query/resolve-request.js#L72
Все функции кроме самой основной — без типов, два чейна с самыми разными преобразованиями, каждый чейн — это цепь преобразований Either типа
В итоге я вижу полный вывод типа, включая ветку ошибок
Что в следующем фолде я сворачиваю в короткий и ясный тип, который флоу вывел без затруднений
Шоб у меня все костыли так работали))

Sergey
23.08.2017
18:58:23
Аж голова разболелась от вашего фп
Не чё не понятно

andretshurotshka?❄️кде
24.08.2017
10:03:11
https://github.com/gcanti/newtype-ts

Vadim
24.08.2017
20:37:40

Google

andretshurotshka?❄️кде
24.08.2017
20:38:03
?

Дмитрий
24.08.2017
20:45:04
Всегда так делаю
На самом деле просто в случае качественных тестов реально проще заглянуть в них и самому увидеть все кейсы, которые рассматривал автор

Vadim
24.08.2017
23:56:34

Gleb
25.08.2017
05:04:39
Привет, ребят по кругу уже вопрос задаю, но RX marbles тесты это самый правильный путь тестирования RX кода?
Я помню и статью мне присылали как тестировать rx 5 like rx4 но все таки в оф доках они только про marbles говорят тесты
И вообще не понятно как протестить всякие рипиты и прочее
Черт кто нибудь вообще осилил эти marbles?

andretshurotshka?❄️кде
25.08.2017
08:48:43

Denis
25.08.2017
11:13:02
Кстати может у кого-то есть книга вроде называется implement modern compiler in ML
https://medium.com/@luijar/mixin-monoidal-behavior-in-javascript-4e5c4dcb3ffc

Nikita
25.08.2017
20:12:20
о! наконец-то алгебраические структуры с буррито не сравнивают

Vadim
25.08.2017
22:44:42
И вообще не понятно как протестить всякие рипиты и прочее
Я использую стримы в очень ограниченном виде, ибо для моих задач полностью хватает нескольких простейших операторов. Марбл-тесты прикручивал, но пока у меня там и тестировать-то было нечего особо )
Теперь по-поводу репита и чего-либо еще. Марбл-тестом ты проверяешь ВЫХОД выбранного стрима. Например ты ожидаешь что после всех репитов и прочего на выходе ты получишь a-b-c-a-b-c, то ты это и сможешь проконтролировать.
Данные на выходе не показывают через какие преобразователи стрим прошел (репит или скип-дупликатс и т.д.). Ты видишь лишь результат, и можешь стравнить его со своими ожиданиями.
А так-то в марбл-тестах всего несколько операторов )

Gleb
26.08.2017
02:29:26
Все понял, спасибо большое)

.
27.08.2017
09:00:17
Вопрос глупый, но сам нормального ответа я не нашел. Есть какой-то способ описать интерфейс в флоу или тайпскрипт, чтобы он мог принимать только типы ковариантные заданному?