
Denis
22.05.2017
11:55:01
тогда ельм

Дмитрий
22.05.2017
11:55:21
Потому что breaking changes every day
Но я всё равно его выбрал, он прикольный) elm не нужен

Yumi
22.05.2017
11:55:51
Эльм и Пурсу лучше не учить совсем, это усложнение пути, в Эльм чате кстати это уже обсуждали.

Google

Yumi
22.05.2017
11:56:35
Ну для врыва в фп.

Kirill
22.05.2017
11:57:13
Я имел ввиду и с точки зрения расширения сознания и переноса полезных концепций из ФП в фронтэнд.

Дмитрий
22.05.2017
11:57:18
Я например для себя вижу практическое применение purescript, в плане интеропа с жс, а хаскель если только чисто для базиса пригодится

Yumi
22.05.2017
11:58:11

Denis
22.05.2017
11:58:58
https://github.com/liqula/react-hs

Дмитрий
22.05.2017
11:59:43
Ghcjs как морская свинка — и не морская и не свинка

Yumi
22.05.2017
12:04:57
Это типо Хаскелль?

Дмитрий
22.05.2017
12:08:55
Угу

andretshurotshka?❄️кде
22.05.2017
12:13:04

Aleh
22.05.2017
12:13:21
типа научит плохому онли

Yumi
22.05.2017
12:14:07
эльм-то усложнение?)
Ну для изучения фп думаю да, а так на нем не писал что-то больше hello world, не скажу.
Непонятно вообще чему он научит, как с помощью концепции, которая в ридаксе писать приложения и что это тру фп?
А дальше куда развиваться?

Google

andretshurotshka?❄️кде
22.05.2017
12:16:46
а, вы в этом ключе)

Evgeny
22.05.2017
12:56:07
Но, например, выступления Хикки и Нолена всё равно с удовольствием слушал бы

Kirill
22.05.2017
14:12:24
Что брать на русском?
https://www.ozon.ru/?context=search&group=div_book&text=%f0%f4%fb%eb%f3%e4%e4&catalog=1132527&russianlanguage=1&store=1%2c0&sort=year

Denis
22.05.2017
14:13:26
Что брать на русском?
http://anton-k.github.io/ru-haskell-book/book/toc.html (годнота и даже ТК есть чутка с категорнымы типами (начало для RS))

Kirill
22.05.2017
14:14:09
Ещё вот такое встречал https://www.ohaskell.guide/
Просто думал, что именно книги ещё годные есть.

Denis
22.05.2017
14:16:15
это да
это вообще для начинающих

? animufag ?
22.05.2017
14:27:51
Что брать на русском?
цель – обучение с нуля? так то думаю книга от шевченко нормальная, хотя сам ни разу не читал, тк базовые вещи.
(зато когда то читал learn you a haskell и было очень нудно, чувство что читателя держат за дауна и гораздо больше понравилась real world haskell, которую все тогда уже хейтили за то что она устарела)

Kirill
22.05.2017
14:30:53
Да, с нуля, но для человека знакомого с ФП уровня functional JS.

Denis
22.05.2017
14:36:59
особенно если в алгебре смотреть то это производные типов представленых формулой

? animufag ?
22.05.2017
14:40:08

Denis
22.05.2017
14:40:17
ага

? animufag ?
22.05.2017
14:40:28
нет это не удивление
это вопрос
как гуглить

Denis
22.05.2017
14:40:46
Zippers

Google

Denis
22.05.2017
14:41:03
это такая штука что дает возможность бегать по структуре
http://learnyouahaskell.com/zippers

? animufag ?
22.05.2017
14:42:16
ааа

Yumi
22.05.2017
15:07:04
Не почувствовал себя дауном, наверное это плохо.
Что-то хочется и Кложу поучить и Хаскелль, а время только на что-то одно есть. Понятно, что Хаскелль такой весь крутой, но Лисп и Кложур привлекают своей системой типов и скобочками.

Denis
22.05.2017
15:26:47
системой типов?
откуда у кложи они? :D

Yumi
22.05.2017
15:41:28
?
Ещё возможно на изи зайдет потом scip.
Не хочется в питон варианте или рокет-чего-то-там проходить.

? animufag ?
22.05.2017
15:54:39
Может тебя заинтересует обучение хаскелю через написание лисп интерпретатора (не уверен, конечно, что таким образом можно кого-либо обучить)


Vadim
23.05.2017
15:45:26
Люди, я правильно понимаю, что при "бесконечном" каррировании (то есть когда функция возвращает себя же, и та затем снова вызывается), то переполнения стека вызовов не должно быть?
Я говорю о функции такого типа func()()()()()()()()()()()()()()()()......
Я сделал простейшую функцию, которая, если результат не меньше 10, то возвращает каррированную себя же, а если больше 10, то возвращает результат
const curryMaker = (pred, reducer, memo = 0) => (...args) => {
const currentRes = reducer(...[memo, ...args]);
return pred(currentRes) ? currentRes : (...nextArgs) => curryMaker(pred, reducer, currentRes)(...nextArgs)
};
// если результат меньше 10, то возвращает себя же
const summator = curryMaker((val) => val >= 10, function (memo, ...args) {
return R.sum([memo, ...args]);
});
summator(5)(1)(7); // => 13
// А вот так тестирую:
let j = 0;
for (let i = 0, res = null; i < 10000000; i++) {
res = summator(0);
if (typeof res === 'function') {
j++;
}
}
setTimeout(() => console.log('j', j), 1);
В итоге все ок. Хоть десять миллионов вызовов. Этого я не ожидал )
У меня вопрос, не упрусь ли я все-таки в переполнение стека на каких-нибудь браузерах? Просто у меня мак и пока не стоит никаких виртуалок для тестов. Не будет ли переполнения стека в ie? Или в каком-нибудь, скажем, ie10, или на мобилке?


Filipp
23.05.2017
15:50:14
кажется это называется tail call optimization =)

Vadim
23.05.2017
15:50:58
Я тоже это подозреваю. Я не могу найти информацию про нее насчет конкретных браузеров, типа ie10 или оперы для мобилок

Filipp
23.05.2017
15:51:08
ты остаёшься на одном уровне в стеке, точнее ходишь вверх-вниз между двумя
за счёт этого он не растёт

Google

Vadim
23.05.2017
15:51:38
Я логику понимаю. У меня опасение просто что не везде есть такая оптимизация

Filipp
23.05.2017
15:51:50
так она у тебя в коде

Vadim
23.05.2017
15:52:09
Так это везде должно работать?

Zae
23.05.2017
15:52:25
вадим наверное про garbage collector

Filipp
23.05.2017
15:52:42
a автоматически она не работает почти нигде

Vadim
23.05.2017
15:53:07
Я проверил на своем маке под chrome, firefox и safari

Filipp
23.05.2017
15:53:08
ну это уже другая проблема)

Vadim
23.05.2017
15:53:27
В этих браузерах я ничего не настраивал для таких оптимизаций, и все ок

? animufag ?
23.05.2017
15:53:37
на первый взгляд:
у тебя нет увеличения стека
значит здесь нет смысла если бы tco был или не был
думаю что в js нет tco (просто догадки)

Admin
ERROR: S client not available

Filipp
23.05.2017
15:53:38
в js она есть в сафари и за флагом в хроме

Vadim
23.05.2017
15:55:49
Значит проблем в более менее старых браузерах тоже ожидать не стоит?

? animufag ?
23.05.2017
16:01:43
не понимаю теста. зачем 1000000 раз просто вызывать функцию
ладно бы res = res(j)


Vadim
23.05.2017
16:03:42
Но так или иначе: http://ramdajs.com/repl/?v=0.23.0#?const%20curryMaker%20%3D%20%28pred%2C%20reducer%2C%20memo%20%3D%200%29%20%3D%3E%20%28...args%29%20%3D%3E%20%7B%0A%20%20%20%20const%20currentRes%20%3D%20reducer%28...%5Bmemo%2C%20...args%5D%29%3B%0A%20%20%20%20return%20pred%28currentRes%29%20%3F%20currentRes%20%3A%20%28...nextArgs%29%20%3D%3E%20curryMaker%28pred%2C%20reducer%2C%20currentRes%29%28...nextArgs%29%0A%7D%3B%0A%0Aconst%20sumator%20%3D%20curryMaker%28%28val%29%20%3D%3E%20val%20%3E%3D%2010%2C%20function%20%28memo%2C%20...args%29%20%7B%0A%20%20%20%20return%20R.sum%28%5Bmemo%2C%20...args%5D%29%3B%0A%7D%29%3B%0A%2F%2F%20sumator%285%29%281%29%287%29%3B%0A%0Alet%20j%20%3D%200%3B%0A%0Afor%20%28let%20i%20%3D%200%2C%20res%20%3D%20sumator%3B%20i%20%3C%201000000%3B%20i%2B%2B%29%20%7B%0A%20%20%20%20res%20%3D%20res%280%29%3B%0A%20%20%20%20if%20%28typeof%20res%20%3D%3D%3D%20%27function%27%29%20%7B%0A%20%20%20%20%20%20%20%20j%2B%2B%3B%0A%20%20%20%20%7D%0A%7D%0A%0AsetTimeout%28%28%29%20%3D%3E%20console.log%28%27j%27%2C%20j%29%2C%201%29%3B


? animufag ?
23.05.2017
16:07:36
далее у функции будет постоянно расти скоп. как он устроен в плане оптимизации хз, но по идее вложенная функция имеет доступ к локальным переменным внешней, и все эти переменные при исполнении хранятся в стеке. с каждым захватом скопа, стек будет расти

Vadim
23.05.2017
16:08:14
Но я в лимит так и не упираюсь нигде

Google

Дмитрий
23.05.2017
16:08:49
Потому что ты не используешь стек

Vadim
23.05.2017
16:09:11
В мобильных браузерах тоже не должно быть проблем?
Особенно не в последних версиях

Дмитрий
23.05.2017
16:11:14
При бесконечном пересоздании функций конечно же будут проблемы)
но утекшая память — это кажется не то, тчо ты ожидаешь)

Vladimir
23.05.2017
16:12:05

Vadim
23.05.2017
16:20:42
В принципе, проверил в ie10 под windows7 (прогнав сперва через бабель, что б не переписывать) - действительно проблем нет )
https://www.browserling.com/browse/win/7/ie/10/https%3A%2F%2Fjsfiddle.net%2Fw4hdu8h8%2F

Yumi
23.05.2017
20:40:45

? animufag ?
23.05.2017
20:42:36

Yumi
23.05.2017
20:47:15
Нужно просто подумать, что случается с лексическими средами во время каррирования.

? animufag ?
23.05.2017
20:53:25
как-то сложновато звучит
интересно что он проводит какой то анализ и решает захватывать переменные из внешнего скопа или нет
ну и также интересно что в дебагере вообще можно посмотреть этот скоп. хз как его вывести просто через log

Yumi
23.05.2017
21:09:36
В инспекторе, через debugger можешь посмотреть и потыкать.
debugger; перемещает в режим отладки.
Там через F11 вроде можно вообще в v8 уровня жс кода погрузиться.

Filipp
23.05.2017
22:30:27
Вообще вроде утекать ничего не должно, потому что переменные попадают каждый раз только в замыкание текущей возвращаемой функции, но не последующих (потому что следующая объявляется только при исполнении этой)

Denis
24.05.2017
07:12:34
Почему не какой-то chainRec?

Vadim
24.05.2017
07:36:09
В общем, я правильно понимаю, что "ничем не ограниченного карринга" лучше избегать? Кабы чего не вышло? )
Особенно там, где есть потенциально очень длинные процессы. Например на стороне node.

Aleh
24.05.2017
07:43:48
А какой в нем профит?