
分解物質
12.10.2017
14:31:37
https://youtu.be/JYG5LFHkUuE?t=1h9m17s
учасников коммитета C++ спрашивают что такое монада

andretshurotshka?❄️кде
12.10.2017
14:31:56
лол

Denis
12.10.2017
14:36:04
С++ не нужен! Даёшь раст!

Юрий
12.10.2017
17:41:39
Кстати, тому, кто писал пост в телеграф из шапки — отдельное спасибо за ruhaskellbook. Прям очень годно.

Google

code4aman
12.10.2017
18:50:26
https://www.youtube.com/channel/UCEtohQeDqMSebi2yvLMUItg 6 часовые доклады ?

? animufag ?
12.10.2017
18:54:43
ого
yesod 2k17

code4aman
12.10.2017
18:54:55
воркшопы то есть

Taras
12.10.2017
19:51:15
Привет, я нуб в фп. Посоветуйте либу с монадами.
Все, что нашел https://monet.github.io/monet.js/
https://github.com/dustinws/zoom
можна юзать это?

illiatshurotshka❄️
12.10.2017
19:58:42
https://github.com/sanctuary-js/sanctuary ?
но лучше сразу purescript

Kelin
12.10.2017
20:00:11

kana
12.10.2017
20:01:12
Почему ор?

Kelin
12.10.2017
20:03:48
Почему ор?
Ну челик написал, что он нуб и кидает либу в жс
Как думаешь, готов ли он к пурсе?

kana
12.10.2017
20:05:13
Ну на пурсе проще в монады въехать будет, чем в жс. Да и имхо пурса проще жс, сложно лишь поначалу мозги правильно поставить. Но если он уже ищет монады на жс, то значит уже вполне готов
Писал как-то друг на жс с монадами сложный код, ебануться можно было. А потом я на пурсе написал, все просто до невозможности

Google

Kelin
12.10.2017
20:13:50
есть вероятность, что он просто увидел умное слово и пошел искать либу для этого сразу
всегда нужно учитывать этот фактор

illiatshurotshka❄️
12.10.2017
20:15:08
не нужно подразумевать

Kelin
12.10.2017
20:15:47

? animufag ?
12.10.2017
20:41:49
Ну наверное монады на жс для обучения
Хз зачем их на серьёзе использовать

illiatshurotshka❄️
12.10.2017
20:43:41
нулл предлагаешь?

? animufag ?
12.10.2017
20:49:36
Нулл всё равно остаётся
Или бинд спасает?

illiatshurotshka❄️
12.10.2017
20:50:11
ну нулл точно не будет на твоей стороне

? animufag ?
12.10.2017
20:50:53
Нулл всегда против меня

andretshurotshka?❄️кде
13.10.2017
02:50:57
?

Даниил
13.10.2017
06:48:34

tusaeff
13.10.2017
07:03:13
Добавить [key:

Alex
13.10.2017
07:29:04

? animufag ?
13.10.2017
08:41:04
промисы тоже для обучения?)
Хм, пожалуй нет)) Пожалуй штука для работы с асинхронщиной не для обучения.
Получается моё допущение ошибочно и абстракция реализуемая на инородной модели полиморфизма тоже не для обучения

andretshurotshka?❄️кде
13.10.2017
17:01:26
PCJ: Rewrite haskal in rust! http://ift.tt/2yeYy62 http://ift.tt/2g781BR


Даниил
13.10.2017
17:04:11
Хм, пожалуй нет)) Пожалуй штука для работы с асинхронщиной не для обучения.
Получается моё допущение ошибочно и абстракция реализуемая на инородной модели полиморфизма тоже не для обучения
просто промис — такая немного кривая, но монада (кривая потому что авторы спецификации опять намудрили с неявным приведением типов, поэтому then ведёт себя и как функторный map, и как монадический chain)
а сама по себе монада — просто паттерн (на самом деле все эти штуки из ТК и алгебры, применяемые в программировании — те же ООП-паттерны, только лучше формализованные и имеющие под собой теоретическую основу)
так вот понимать что такое функтор, монада и т.д. нужно чтобы каждый раз не переизобретать колесо: видишь что то что ты пишешь напоминает уже знакомый тебе паттерн — оформляешь код по всем формальным правилам этого паттерна и указываешь, что это за паттерн, чтобы тому кто читает твой код было проще понять что к чему
и это вполне применимо и полезно и в JS, несмотря на то что его система типов даже со всякими Flow гораздо меньше помогает в работе с подобными паттернами, чем нормальные системы типов


? animufag ?
13.10.2017
17:06:12
просто промис — такая немного кривая, но монада (кривая потому что авторы спецификации опять намудрили с неявным приведением типов, поэтому then ведёт себя и как функторный map, и как монадический chain)
а сама по себе монада — просто паттерн (на самом деле все эти штуки из ТК и алгебры, применяемые в программировании — те же ООП-паттерны, только лучше формализованные и имеющие под собой теоретическую основу)
так вот понимать что такое функтор, монада и т.д. нужно чтобы каждый раз не переизобретать колесо: видишь что то что ты пишешь напоминает уже знакомый тебе паттерн — оформляешь код по всем формальным правилам этого паттерна и указываешь, что это за паттерн, чтобы тому кто читает твой код было проще понять что к чему
и это вполне применимо и полезно и в JS, несмотря на то что его система типов даже со всякими Flow гораздо меньше помогает в работе с подобными паттернами, чем нормальные системы типов
Аа ты привёл инстанс монады как довод в необходимости всей абстракции

Google

Дмитрий
13.10.2017
17:07:40
Внезапно пришла в голову идея как сделать типизированный интероп между flow и purescript - в последнем удобный механизм foreign import, ввиду чего можно описать примитивные монадические типы на flow (уже), а в purescript юзать их как нормальные тайпклассы
Таким образом можно будет писать сложные куски кода на пурсе и не терять в типизации остального кода

? animufag ?
13.10.2017
17:09:40
звучит как очень плохо всё

andretshurotshka?❄️кде
13.10.2017
17:11:08

Дмитрий
13.10.2017
17:11:28
Так обратно же проблем и не было
Что меня и парило, под крутым интеропом авторы почему то решили подразумевать только одностороннее движение от жс к пурсе, что здорово но слишком оптимистично
звучит как очень плохо всё
Да не, наоборот, от жс в таком случае требуется минимум - просто нормально типизировать сами объекты/классы, создаваемые пурсой чтобы прочесть результаты. При этом тайпклассы и прочие абстрактные вещи остаются в том окружении в котором с ними удобнее работать


? animufag ?
13.10.2017
17:15:55
просто промис — такая немного кривая, но монада (кривая потому что авторы спецификации опять намудрили с неявным приведением типов, поэтому then ведёт себя и как функторный map, и как монадический chain)
а сама по себе монада — просто паттерн (на самом деле все эти штуки из ТК и алгебры, применяемые в программировании — те же ООП-паттерны, только лучше формализованные и имеющие под собой теоретическую основу)
так вот понимать что такое функтор, монада и т.д. нужно чтобы каждый раз не переизобретать колесо: видишь что то что ты пишешь напоминает уже знакомый тебе паттерн — оформляешь код по всем формальным правилам этого паттерна и указываешь, что это за паттерн, чтобы тому кто читает твой код было проще понять что к чему
и это вполне применимо и полезно и в JS, несмотря на то что его система типов даже со всякими Flow гораздо меньше помогает в работе с подобными паттернами, чем нормальные системы типов
тайпклассы не выражаются в ооп
ооп паттерны лучше не с чем не сравнивать. просто набор эвристик нароботанных годами, в них нет смысла.
да, иметь ввиду что нечто является монадой можно.
но в целом всё напоминает как несколько лет назад на хабре появлялись монада-туториалы. ну и там либо чел рассказывал что вот нулейбл или список монада, и показывал что его мапать можно. ну и прочие частные случаи
код обобщённый над монадами таким образом конечно не появляется


Даниил
13.10.2017
17:30:26

Дмитрий
13.10.2017
17:31:00
Тут даже гадать не надо

? animufag ?
13.10.2017
17:31:15
ну так они подаются людям которые не верят что монады нужны

Дмитрий
13.10.2017
17:32:13
js Array отлично подходит для объяснения концепции, так как даёт хорошую интуицию для коммутативной диаграммы

? animufag ?
13.10.2017
17:32:32
и тип такие умники - смотрите у вас тут в коде монада, а вы и не знали! вот разбирайтесь сами что с этим делать, но помните что это монада (при том что инстансы не всегда однозначны)

Даниил
13.10.2017
17:36:09
Аа ты привёл инстанс монады как довод в необходимости всей абстракции
ну так смотри, у нас в стандарте жс есть массивы и промисы, с которыми можно работать (и работают) как с функторами и монадами
это я не говорю о всяких вещах, которые не входят в стандарт, но которыми пользуются, вроде мэйби
это же логично, даже с точки зрения классического оопшника, что повторяющиеся подходы имеет смысл выделить в какой-то паттерн, даже не ради более обобщённого кода, а хотя бы чтобы, как я и сказал, не "переизобретать каждый раз колесо заново"

andretshurotshka?❄️кде
13.10.2017
19:11:27
ее монады

? animufag ?
13.10.2017
19:16:28
какая-то неправильная картинка. как будто производная в центре равна нулю
ну вообще норм тема сводить разговоры о монадах к монологу лейбница

andretshurotshka?❄️кде
13.10.2017
19:19:59
вообще если бы здесь потролить то норм отсылаться на лейбница про его монолог

? animufag ?
13.10.2017
19:20:17
хорош

Google

andretshurotshka?❄️кде
13.10.2017
19:34:35
?

Даниил
13.10.2017
19:45:09

andretshurotshka?❄️кде
13.10.2017
19:45:57

Даниил
13.10.2017
19:46:01
не

andretshurotshka?❄️кде
13.10.2017
19:46:06
(

Даниил
13.10.2017
19:47:28
я особо до этого с фронтендом дела не имел, сейчас вот делою простенькое тестовое приложение на реакте и редаксе, но чё-то больно стало, хочу ADT и тайпклассы, вот и думаю шо можно часть на пурсе написать
но вот тогда проблемы с типизацией остального кода

andretshurotshka?❄️кде
13.10.2017
19:48:15
почему часть?)

Даниил
13.10.2017
20:13:59
ну хз, может если норм пойдёт то и не часть)

andretshurotshka?❄️кде
14.10.2017
09:16:30
Oh, I changed from ELM to pure jQuery because ELMS doesn't have support for mouse events and selection.

oleg
14.10.2017
09:34:11
Wtf
Разве?

andretshurotshka?❄️кде
14.10.2017
09:37:01
? хз
https://www.reddit.com/r/javascript/comments/75zyrm/this_onsite_coding_assignment_failed_20_frontend/

Name
14.10.2017
09:50:54

Юрий
14.10.2017
11:44:01
Парни, можете подсказать, как вот это переписать в pointfree style (или хотя бы исключив document)?
const setIsOwn = userId => document => R.set(R.lensProp('isOwn'), R.propEq('user', userId, document), document)

andretshurotshka?❄️кде
14.10.2017
11:46:47
ее поинтфри
@ZeroBias

Юрий
14.10.2017
11:48:46
В принципе, наверное, можно через zip пойти (сначала получить нужное значение isOwn, потом через линзу вставить в zip), но это выглядит некрасиво )

Kelin
14.10.2017
11:49:07
const setIsOwn = userId => chain(set(lensProp('isOwn')), propEq('user', userId))

Google

Kelin
14.10.2017
11:49:13
почти

andretshurotshka?❄️кде
14.10.2017
11:49:53
лол
как это

Kelin
14.10.2017
11:50:15
Вообще document и userId надо местами поменять
тогда проще будет

andretshurotshka?❄️кде
14.10.2017
11:52:56
а все догнал

Kelin
14.10.2017
11:53:13
Вариант для даунов
const setIsOwn = converge(set(lensProp('isOwn')), [pipe(prop('userId'), propEq('user')), prop('document')])
setIsOwn({ userId, document })

andretshurotshka?❄️кде
14.10.2017
11:55:13

Kelin
14.10.2017
11:55:17
Выносим пропы отдельно и как будто не поинтфри
const userId = prop('userId')
const document = prop('document')
const isOwn = lensProp('isOwn')
const setIsOwn = converge(set(isOwn), [
converge(propEq, [userId, document]),
document
])

illiatshurotshka❄️
14.10.2017
11:55:21
setIsOwn = join . (set (lensProp "isOwn") .) . propEq "user"
лол

Kelin
14.10.2017
11:55:40
а бля, там propEq оба принимает
тогда еще веселее

andretshurotshka?❄️кде
14.10.2017
11:56:03

Kelin
14.10.2017
11:56:44
Когда очень хочется поинтфри
гагага