
Denis
14.07.2017
18:26:29
вот пример с параморфизмом (тот же что и zipWith)
bloat' :: a -> [a] -> [[a]]
bloat' y = para phi where
phi = \case
Nil -> [[y]]
Cons x (xs, ys) -> (y:x:xs) : fmap(x:) ys

Vadim
14.07.2017
18:35:56
Так, у меня еще один вопрос насчет ap
Приведенный выше код:
ap(equals, reverse)('aba') // => true
ap(equals, reverse)('ab') // => false
делает ровно то же, что и chain
chain(equals, reverse)('aba') // => true
chain(equals, reverse)('ab') // => false
А есть ли у ap какие-то свои уникальные возможности работы с функциями, в отличии от chain?

Denis
14.07.2017
18:40:47
Reader monad

Google

Vadim
14.07.2017
18:41:15
В данном случае ap не может что-то уникальное предложить?
Если я работаю с функциями
В качестве аргументов

Denis
14.07.2017
18:41:44
chain = k => f => r => k(f(r)(r))
еще задание
докажи что chain = B(B)(W) где B = x => y => z => x(y(z)), W = f => x => f(x)(x)

Дмитрий
14.07.2017
18:47:26

Denis
14.07.2017
18:48:24
ну и еще с ap эффектом управлять нельзя, а с chain можно

Vadim
14.07.2017
19:12:01

Denis
14.07.2017
19:12:44
ты с массивом что-то лучше поделай

Vadim
15.07.2017
06:58:21
Вот кстати, простейший пример что б понять разницу в действии между chain и ap в работе с функциями:
chain(concat, toUpper)('a') // => "Aa"
ap(concat, toUpper)('a') // => "aA"
chain = k => f => r => k(f(r)(r))
Из моего примера получается что chain работает так:
chain = k => f => r => k(f(r))(r)
Просто как противоположность работы ap
ap = k => f => r => k(r)(f(r))
Вот и вся разница в применимости этих двух методов )

Google

Combot
15.07.2017
08:54:18
combot.org/chat/-1001071213089

Vadim
15.07.2017
10:38:23
Еще маленький, хотя и наверное бесполезный трюк с ap (как и с chain), это возможность передать сразу два однотипных аргумента в функцию, указав только один )
ap(add, identity)(3) // => 6
Что немного короче чем
compose(apply(add), flip(repeat)(2))(3) // => 6

andretshurotshka?❄️кде
15.07.2017
10:44:22
А useWith и converge ?

Denis
15.07.2017
10:48:01

Vadim
15.07.2017
10:49:07

Denis
15.07.2017
10:49:32
тут нет ничего неожиданного это же монадный join
средуцируй chain(identity)(3)
в данном случае стрелка Клейсли тривиальная - k = indentity
chain = k => f => r => k(f(r))(r)
chain(identity) = f => r => identity(f(r))(r), f => r => f(r)(r) что есть W или комбинатор - дубликатор

Vadim
15.07.2017
10:53:55
Ну да, если учесть что unnest это просто R.chain(R.identity), как и указано в документации, то логично что это то же что и chain(identity, add)(3)

Denis
15.07.2017
10:55:12
ну вообще играться с монадами и аппликативами на примере с функциями не особо прикольно. Для функциональных стрелок (функций) это все тривиально, и если интересно то можешь на комбинаторы посмотреть

Vadim
15.07.2017
10:55:54
Комбинаторами является что?

Denis
15.07.2017
10:56:22
теория комбинАторного исчисления

Vadim
15.07.2017
10:57:00
Опять пошли матюки ) Ну ладно, может через годик... )

Дмитрий
15.07.2017
11:01:01

Denis
15.07.2017
11:02:02
самый упоротый тут http://www.angelfire.com/tx4/cus/combinator/birds.html когда через аксиоматику SK выражается все остальное

Vadim
15.07.2017
11:06:13
Ух!
Тут пока проблема не в понимании, а в осознании случаев когда какие комбинаторы могут понадобиться. Так или иначе, требуется дозревание )

Denis
15.07.2017
11:06:48
ну для себя можешь понять что комбинаторы дают возможность писать в point free

Vadim
15.07.2017
11:07:13
А compose это просто конструктор любых комбинаторов?

Google

Denis
15.07.2017
11:07:18
так как это минимальная единица в языке комбинаторов и у нее есть единственный метод - это применение

Vadim
15.07.2017
11:09:48
Получается что K это always, а S это ap

Denis
15.07.2017
11:10:30
const MO = B1(W)(B);
const MO1 = B(B(W))(B);
еще как chain можно сделать вроде

andretshurotshka?❄️кде
15.07.2017
11:13:43
BMW

Vadim
15.07.2017
11:14:49
Но все-равно, пока до осознания СЛУЧАЕВ ПРИМЕНЕНИЯ мне еще далеко.
Кстати, существует ли какая-то статистика сколько времени "типичному программисту" с нормальным опытом в программировании вообще (например ООП), но без опыта в функциональщине требуется для перехода к полноценной работе в ФП? Год погруженной работы над проектом? )
У хаскеля например какой типичный срок? )

Denis
15.07.2017
11:16:17
BMW
интересно что это будет за комбинатор)
B = x => y => z => x(y(z))
M = x => x(x)
W = f => x => f(x)(x)

Vadim
15.07.2017
11:17:46

Denis
15.07.2017
11:18:08
ramda не о комбинаторах

andretshurotshka?❄️кде
15.07.2017
11:19:32

Vadim
15.07.2017
11:19:49

Denis
15.07.2017
11:19:57

Yung
15.07.2017
11:21:04
Кто-то https://github.com/calmm-js/partial.lenses использует? Оно с рамдой имеет смысл? Мне кто-то посоветовал с иммьтаблжс юзать, но я не уверен, а ридми слишком жирный чтобы сделать какие-то выводы сразу

Denis
15.07.2017
11:21:40
есть еще https://github.com/phadej/optika

Дмитрий
15.07.2017
11:21:44

Google

Denis
15.07.2017
11:22:49
optika тоже

Дмитрий
15.07.2017
11:23:00
Нет

Admin
ERROR: S client not available

Denis
15.07.2017
11:23:10
при том это от чувака кто в haskell пишет и публикует либы на нем

Дмитрий
15.07.2017
11:23:16
При всем уважении к phadej

Vadim
15.07.2017
11:23:24

Denis
15.07.2017
11:23:48
ну и https://github.com/gcanti/monocle-ts

Дмитрий
15.07.2017
11:24:37
Тем более

Denis
15.07.2017
11:24:40
ахаха https://github.com/gcanti/profunctor-lenses-ts

andretshurotshka?❄️кде
15.07.2017
11:25:08
лол

Дмитрий
15.07.2017
11:25:50
Кроме того, чтобы быть математиком и хаскеллистом, нужно ещё нормальное api у библиотеки

Denis
15.07.2017
11:26:19
ну и для тех у кого нет жизни)) http://oleg.fi/gists/posts/2017-04-18-glassery.html
https://artyom.me/#lens-over-tea

Дмитрий
15.07.2017
11:26:59
partial покрывает вообще такую тонну кейсов, что мне кажется вот у автора точно жизни нет

Denis
15.07.2017
11:27:23
это же просто Кметтовские линзы

Дмитрий
15.07.2017
11:27:27
Там вообще всё всё напихано
Со спецификой жс

Denis
15.07.2017
11:27:42
а если честнее то вроде van laarhoven lenses

Дмитрий
15.07.2017
11:30:43
Я просто только сегодня утром опять сравнивал либы для оптики в жс. У всех — очень крутые и продвинутые наброски, увы ?

Google

Yung
15.07.2017
11:30:47
Такс, тогда второй вопрос, а использование какого-нибудь rxjs с графом Кью Эль имеет право на жизнь и вообще юзабельно?

andretshurotshka?❄️кде
15.07.2017
11:30:55
?

Denis
15.07.2017
11:31:15

Дмитрий
15.07.2017
11:31:32
Graphql не нужен)

Denis
15.07.2017
11:31:38
+1

Yung
15.07.2017
11:31:39
нафига?
Патамушно я магу (это петпроджект сейчас, есть время потыкать новое)
Чтобы потом уже выбрать что норм зашло, а что не стоит тянуть в рабочий проект

Дмитрий
15.07.2017
11:32:49
Спойлер — graphql не зайдёт))

Yung
15.07.2017
11:33:30

Denis
15.07.2017
11:33:41
graphql глазастая ебанина узковходящая не в каждую дырку

Yung
15.07.2017
11:35:25
Да мы тут когда проект пилили, думали взять графа то, но в итоге передумали, там статейки именно от всяких фб не очень радужные, проблемы с секюрностью во все поля и костыли чтобы это как-то замять
Но на пете решил потыкать мб