
Vadim
12.06.2017
16:34:19
Я имею в виду что для непонятливых, которые хотят врубиться без чтения сложного описания достаточно просто привести например, примеры для chain не только с массивами, но и, скажем, с простым числом
или с объектом
А то новичку может действительно показаться что метод работает только с массивами

Дмитрий
12.06.2017
16:35:13

Google

Vadim
12.06.2017
16:35:28
Необходимых примеров привести достаточно
И корректной сигнатуры

Дмитрий
12.06.2017
16:35:45
Метод chain работает с Monad, с Chain если быть точным
Другое дело, что массивы и строки в жс отвечают спеке fantasy-land Chain
Проблему "почему нет типа" проще всего описывает пресловутое
«Монада — это моноид в категории эндофункторов»
абсолютно самодостаточное определение, замкнутое на само себя и теорию категорий

Denis
12.06.2017
16:41:01
Декартово замкнуто?

Дмитрий
12.06.2017
16:41:47
Весь мессадж сейчас обломаешь)
Я пробовал сделать доку для рамды) Там тупо непонятно, куда в интерфейсе умещать все эти глубокие сведения, отсылки и связи, мне банально не хватало фантации уже)
Поэтому для того, чтобы дока была ок, нужен хороший спец по UX, а авторы рамды всё же программисты
Местами до жути ленивые, конечно

Vadim
13.06.2017
07:52:11

Google

Yumi
13.06.2017
08:12:07
0.1.toFixed(20)
?

Denis
13.06.2017
10:21:37

Дмитрий
13.06.2017
11:11:23
Простое число (в смысле не объект Number) это тоже монада?
Тут немного иначе)
Представь себе, что вот есть стейт — условный State x. Мы хотим его обработать, и поэтому пишем какую-то функцию, обрабатывающую значение в нём, но заворачивать его обратно она не умеет
f(State) -> payload
Поэтому мы делаем функцию, которая умеет сохранять полученное нами значение.
f(State, payload) -> State
Скомбинировав их, мы получаем самостоятельную функцию для выполнения операций над нашим состоянием
chain( save: (State, payload) -> State, edit: (State) -> payload )
chain( append: (List, el), head: (List) -> el )
chain( join: (String, STRING), toUpper: (String) -> STRING ) )
chain( add: (Num, Num+1), inc: (Num) -> Num+1)
Синтаксис абы какой у меня, да

Denis
13.06.2017
11:13:25
State monad? :D

Дмитрий
13.06.2017
11:15:43
ну я щас долго пытался подобрать аналогию)

Denis
13.06.2017
12:24:52
https://github.com/frptools/collectable

andretshurotshka?❄️кде
13.06.2017
12:27:35
?

Дмитрий
13.06.2017
12:27:37
Оо, неплохо заморочился
Масштабная репа

Vadim
13.06.2017
15:00:50
Тут немного иначе)
Представь себе, что вот есть стейт — условный State x. Мы хотим его обработать, и поэтому пишем какую-то функцию, обрабатывающую значение в нём, но заворачивать его обратно она не умеет
f(State) -> payload
Поэтому мы делаем функцию, которая умеет сохранять полученное нами значение.
f(State, payload) -> State
Скомбинировав их, мы получаем самостоятельную функцию для выполнения операций над нашим состоянием
chain( save: (State, payload) -> State, edit: (State) -> payload )
chain( append: (List, el), head: (List) -> el )
chain( join: (String, STRING), toUpper: (String) -> STRING ) )
chain( add: (Num, Num+1), inc: (Num) -> Num+1)
В итоге мы имеем то, что chain может работать С ЧЕМ УГОДНО?

Denis
13.06.2017
15:01:48
с тем что есть функтор с 2 натуральными преобразованиями и соблюдает законы для монад

Aleh
13.06.2017
15:02:31
что такое натуральные преобразования?

Vadim
13.06.2017
15:02:41

Denis
13.06.2017
15:03:02
булеан или число это контейнерный тип?

Vadim
13.06.2017
15:03:19

? animufag ?
13.06.2017
15:04:04

Denis
13.06.2017
15:04:16

Aleh
13.06.2017
15:04:44

Google

Denis
13.06.2017
15:04:56
вернее это эндофунктор

Aleh
13.06.2017
15:05:28

Denis
13.06.2017
15:06:10
в программировании это
(ню) (вы его знаете как return, of, pure)
(мю) (вы его знаете как join, unnest или же по закону join = chain(id))
1 -> T
T - функтор

Aleh
13.06.2017
15:06:43
понял
спасибо)

Denis
13.06.2017
15:07:08
это я по частям объяснил что монада это моноид в категории эндофункторов

Aleh
13.06.2017
15:08:02
ну я только умею в цепочку функтор -> апликативный функтор -> монада)

Denis
13.06.2017
15:08:03
более интересней посмореть на законы моноида через <=< и pure
а a -> f b есть стрелка Клейсли

Vadim
13.06.2017
15:09:47
Короче, я понимаю что еще не дорос до того, что б понимать ответы на свои вопросы в этом чате )

Denis
13.06.2017
15:09:58
у нас есть категория с объектами как типы и стрелками как функции вида a -> b
так вот есть еще и категория Клейсли
где морфизмы это a -> f b
of -> простой споособ безэффектно упаковать значение в монаду
join - разравниватель структуры (с применением присущего эффекта этому контейнеру)
подкину в топку))) http://www.stephendiehl.com/posts/monads.html
https://bartoszmilewski.com/2017/03/14/algebras-for-monads/

Google

Denis
13.06.2017
15:18:52
тут на картинку смотрите https://en.wikibooks.org/wiki/Haskell/Category_theory#Monads

Дмитрий
13.06.2017
15:31:26

Vadim
13.06.2017
15:39:10
Да. Как и map, equals и ещё ряд методов)
Значит в сигнатуре ошибка?
Chain m => (a → m b) → m a → m b
Ведь в этой сигнатуре указано что чейн может возвращать ТОЛЬКО объект такого же типа, как и принял ("m b"). Правильно? Тогда почему работает следующий код?
chain(curry((arg1, arg2) => 'ha-ha'), identity)([12]) // => 'ha-ha'

Дмитрий
13.06.2017
16:32:17
То есть, присмотрись к сигнатуре a → m b, это функция короче, чем твоя a -> b -> c

Artur
13.06.2017
16:33:51
привет
как в рамде сравнить два массива?
или в ней нет аналога isEqual лодаша?

Дмитрий
13.06.2017
16:34:30
equals

Artur
13.06.2017
16:35:22
<3

Admin
ERROR: S client not available

Artur
13.06.2017
16:35:24
спасибо

Arcady
13.06.2017
16:35:29
а два json объекта можно? без танцев с json.stringify(json.parse(...))

Artur
13.06.2017
16:36:13
кстати, раз уж я тут
у вас есть какая-то методичка по переходу ~на темную сторону~ на функциональный стиль?

Дмитрий
13.06.2017
16:37:09

Artur
13.06.2017
16:45:15
а есть какой-то аналог Object.keys?

Сергей
13.06.2017
16:46:17

Artur
13.06.2017
16:46:32
та любопытство обычное
уже нашел)

Google

Сергей
13.06.2017
16:48:44
что нашел?

Artur
13.06.2017
16:49:36
keys

Сергей
13.06.2017
16:50:25
бля
так это и есть Object.keys?
или ты из какой-то библиотеки нашел?

Дмитрий
13.06.2017
16:50:43
Из рамды же

Сергей
13.06.2017
16:50:51

Дмитрий
13.06.2017
16:51:20
Унификация подхода

andretshurotshka?❄️кде
13.06.2017
16:51:25
каррированая
хотя там аргумент один

Сергей
13.06.2017
16:52:18
а блин
сорян, не заметил в каком чате

andretshurotshka?❄️кде
13.06.2017
16:52:35

Дмитрий
13.06.2017
16:53:09
?
в чем?
Для всех операций используются единообразные функции, не задумываешься, откуда что брать
*если что — то я объясняю мотивацию, а не говорю "надо так делать"))
Потому что вот keys мне точно лень подключать)
А вообще у них там совместивость до ie8 и ловятся разные баги браузеров

Artur
13.06.2017
17:32:58
еще вопрос есть
let pred = R.where({ a: String })
console.log(pred( { a:1 } ))
почему возвращает true?
немного отредактировал

? animufag ?
13.06.2017
17:36:28
String(1)