@frp_ru

Страница 76 из 420
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
Другое дело, что массивы и строки в жс отвечают спеке fantasy-land Chain
А числа? Ведь работает же следующий код: chain(add, inc)(1) // => 3

Метод chain работает с Monad, с Chain если быть точным
Простое число (в смысле не объект Number) это тоже монада?

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
Оо, неплохо заморочился

Масштабная репа

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

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

Vadim
13.06.2017
15:02:41
с тем что есть функтор с 2 натуральными преобразованиями и соблюдает законы для монад
я имею в виду то, что я могу в чейн передать хоть число, хоть булин, хоть еще какую-нибудь хрень?

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
Google
Denis
13.06.2017
15:04:56
Странно звучит что функтор соблюдает монадные законы
ничего странного монада - это функтор с 2 нат преобразованиями что похожи как у моноида на mempty и mappend

вернее это эндофунктор

Aleh
13.06.2017
15:05:28
1 - T (ню) T2 -> T (мю)
ну вот ты не пояснил :(

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
Значит в сигнатуре ошибка? Chain m => (a → m b) → m a → m b Ведь в этой сигнатуре указано что чейн может возвращать ТОЛЬКО объект такого же типа, как и принял ("m b"). Правильно? Тогда почему работает следующий код? chain(curry((arg1, arg2) => 'ha-ha'), identity)([12]) // => 'ha-ha'
Это верно в буквальном прочтении для нормального случая, две функции в chain — это слегка более сложная ситуация) m b у тебя тут — это функция (anything) -> 'ha-ha', а значит на выходе у тебя в итоге просто тип с единственным возможным значением

То есть, присмотрись к сигнатуре 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
а два json объекта можно? без танцев с json.stringify(json.parse(...))
да, и ты не поверишь, как эта функция называется ?

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

Сергей
13.06.2017
16:46:17
а есть какой-то аналог Object.keys?
а чем он тебя не устраивает?

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)

Страница 76 из 420