@frp_ru

Страница 50 из 420
Vadim
29.04.2017
10:17:47
В консоли пишет ругань тогда

Aleh
29.04.2017
10:18:06
в смысле?)

Vadim
29.04.2017
10:18:28
Ошибку? Ща

Aleh
29.04.2017
10:18:35
const

Google
Vadim
29.04.2017
10:18:38
СОрри ))))

Спасибо!

Aleh
29.04.2017
10:18:55
тебе определенно надо перерыв сделать)

Vadim
29.04.2017
10:23:19
А в каких случаях этот chain может быть удобнее, например, pipe?

Задача-то одна и та же - создание цепочки операций для получения единого результата?

Aleh
29.04.2017
10:27:51
но абсолютно разный тип

попробуй через pipe сцепить head и append

Vadim
29.04.2017
10:30:25
Да, понадобится сохранение массива в отдельную переменную )

Спасибо! Поэкспериментирую

Aleh
29.04.2017
10:31:34
https://twitter.com/Crazy_Owl/status/676989458831556608

https://twitter.com/danslapman/status/813711498350567424

Vadim
29.04.2017
10:39:55
Я еще не очень пока освоился с описанием этих функциональных типов. Если читать описание к методу chain Chain m => (a → m b) → m a → m b То это означает что метод chain возвращает монаду, которая принимает каллбек, принимающий аргумент типа a, и возвращающий монаду, принимающую тип b в качестве аргумента? И потом эта "изначальная" монада, которую создает метод chain должна вернуть монаду, принимающую аргумент типа a, и та должна в свою очередь вернуть монаду, возвращающую монаду, принимающую тип b?

Как тогда под это определение ложится следующий пример из той же документации: var duplicate = n => [n, n]; R.chain(duplicate, [1, 2, 3]); //=> [1, 1, 2, 2, 3, 3] ?

Google
Vadim
29.04.2017
10:42:54
Ведь функция duplicate не возвращает никакую монаду?

Vadim
29.04.2017
10:43:34
ок

Тогда еще непонятка с этим примером: R.chain(R.append, R.head)([1, 2, 3]); //=> [1, 2, 3, 1] Где в документации типа указано что в качестве аргументов он может принимать произвольное число функций, возвращающих монады?

Aleh
29.04.2017
10:45:56
А почему head монада?
ща могу ошибиться, но head это монада над типом a, где a - результат head

Vadim
29.04.2017
10:46:19
Это документация неполная, или я не понял как читать это определение метода chain? Chain m => (a → m b) → m a → m b

Vadim
29.04.2017
10:48:21
А третьим аргументом монаду со значением B?

Aleh
29.04.2017
10:48:28
Vadim
29.04.2017
10:48:29
И аргументов может быть только 3?

Aleh
29.04.2017
10:48:35
аргументов только два

Vadim
29.04.2017
10:48:38
Ок

Спасибо!

В этих описаниях типов m - это всегда монада?

Aleh
29.04.2017
10:49:57
чтобы понять, что такое m - надо смотреть запись до =>

m это что-то, что можно чейнить(т.е. монада)

Vadim
29.04.2017
10:50:39
Ух! Спасибо!

Google
Vadim
29.04.2017
10:50:57
Надо найти статью про описание этого синтаксиса описания типов )

Aleh
29.04.2017
10:51:04
может быть например Functor m, обычно конечно запишут Functor f, так принято

ну и в хаскеле оттуда

Vadim
29.04.2017
10:52:12
Но и для js как видно успешно используется

Интересно, есть ли название у этого синтаксиса?

Что б найти какую-нибудь короткую статью на этот счет

Aleh
29.04.2017
10:53:32
не знаю, посмотри определение функций хаскеля

займет час времени, но сразу поймешь записи

Roman
29.04.2017
11:07:28
Что б найти какую-нибудь короткую статью на этот счет
https://medium.com/devschacht/tom-harding-fantas-eel-and-specification-2-type-signatures-c9b2e45dea71 и тут в комментах чуток) https://medium.com/devschacht/спецификация-fantasy-land-bf81121b58cb

Vadim
29.04.2017
11:08:12
Спасибо! Почитаю

Vladimir
29.04.2017
11:16:45
Нотация Хиндли-Мильнера

Aleh
29.04.2017
11:55:06
Нотация Хиндли-Мильнера
не, у них другая ж

они классическую запись Гильберта юзали

или я путаю?

Vadim
29.04.2017
12:52:43
Тогда так же непонятно что именно можно пихать в chain, а что нет )

Aleh
29.04.2017
12:53:31
а что здесь противоречащего?)

Vadim
29.04.2017
12:53:39
А где видно что это монада?

Или ты имеешь в виду, что описание неполное?

Google
Aleh
29.04.2017
12:54:20
по объекту так не скажешь монада он или нет, важно как над объектом определен chain

Vadim
29.04.2017
12:54:50
Так, в итоге, исходя из чего я могу знать, какие методы можно пихать в чейн, а какие нет?

Aleh
29.04.2017
12:55:40
сек

для функций chain определен как return function(x) { return fn(monad(x))(x); };

т.е. функция A -> B является m B

Vadim
29.04.2017
12:56:47
Это значит что можно пихать любую ramda-функцию?

Aleh
29.04.2017
12:56:50
и тогда первым аргументом должна быть функция B -> m C

просто любую функцию

Vadim
29.04.2017
12:57:08
ок, интересно!

Aleh
29.04.2017
12:57:35
там важна связь пары fn и monad

Vadim
29.04.2017
12:58:00
почему-то об этом в документации библиотеки не сказано ничего :/

Aleh
29.04.2017
13:12:26
все в типе

Vadim
29.04.2017
13:13:05
В каком месте в типе говорится о том, что вторым аргументом может идти просто любая функция? Chain m => (a → m b) → m a → m b

Aleh
29.04.2017
13:13:17
m a ж :)

Vadim
29.04.2017
13:14:00
Это же означает что это монада с типом а А не просто любая функция

Aleh
29.04.2017
13:14:14
ну так все правильно

просто так совпало, что некоторые функции тож монады

Vadim
29.04.2017
13:14:56
Так head не монада, судя по его документации

Aleh
29.04.2017
13:15:27
тут такое замкнутое определение

монада это все, что можно чейнить

Google
Vadim
29.04.2017
13:15:52
А в документации head не видно что его можно чейнить

Aleh
29.04.2017
13:16:04
это функции, списки и то, что соответствует спеке fantasy-land

Maxim
29.04.2017
13:16:44
всем привет. Вероятно есть какой-то паттрн, или это не правильный путь

Maxim Shammasov, [29.04.17 16:12] Maxim Shammasov, [29.04.17 16:10] выбрать каррирование для селекта по криетриям или передавать объект критериев Maxim Shammasov, [29.04.17 16:11] в идеале конечно вижу что-то типа Maxim Shammasov, [29.04.17 16:11] select({prop1: 1, prop2:2}) == select({prop1:1})({prop2:2}) Maxim Shammasov, [29.04.17 16:11] вероятно есть какой-то паттерн

Maxim Shammasov, [29.04.17 16:15] эм... я юзаю typescript и у меня функция вроде select(pattern: {prop1?:string, prop2?:number}) Maxim Shammasov, [29.04.17 16:15] с запоминанием названий полей проблем нет Maxim Shammasov, [29.04.17 16:15] просто хотелось бы вызвать частично применённую функцию, а иногда со всеми критериями

Vadim
29.04.2017
13:17:22
это функции, списки и то, что соответствует спеке fantasy-land
То-есть, в таком определении Chain m => (a → m b) → m a → m b "m a" ВСЕГДА означает монаду либо ЛЮБУЮ функцию?

Aleh
29.04.2017
13:21:05
короч да, любая функция монада

Vadim
29.04.2017
13:21:16
Дмитрий
29.04.2017
13:22:53
А в каких случаях этот chain может быть удобнее, например, pipe?
Чейн — это "сделать map, массивы результатов — объеденить"

Ща пример скину, там прям очевидно)

Vadim
29.04.2017
13:24:21
Ну я уже примерно представляю ) Как минимум преимущество в возможности прокидывания коллекции-аккумулятора через цепочку обработчиков

Дмитрий
29.04.2017
13:24:54
Ага

Maxim
29.04.2017
13:25:08
f({a:1, b:2, c:3}) === f({a:1})({b:2, c:3}})

есть ли такой паттерн ?

где вдохновиться, или это бред

Vadim
29.04.2017
13:25:56
curry

сорри ) нет )

Дмитрий
29.04.2017
13:26:25
Ну я уже примерно представляю ) Как минимум преимущество в возможности прокидывания коллекции-аккумулятора через цепочку обработчиков
https://github.com/zerobias/telegram-mtproto/blob/feature/config-provider/src/util/log/index.js#L57 chain(split(',')) — это получить массив строк, разделить их и вернуть опять массив строк)

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