
andretshurotshka?❄️кде
08.08.2017
14:33:14
https://github.com/ReactiveX/rxjs/blob/master/doc/writing-marble-tests.md

Denis
08.08.2017
19:16:59
привалило https://github.com/reaktor/purescript-workshop
https://reaktor.github.io/purescript-workshop/

? animufag ?
08.08.2017
19:21:12
хз. ну надеюсь кто-нибудь распишет впечатления/хайлайты/вопросы

Google

andretshurotshka?❄️кде
08.08.2017
20:01:28
@ZeroBias

Denis
08.08.2017
20:04:56

? animufag ?
08.08.2017
20:24:06
https://reaktor.github.io/purescript-workshop/
Ну тип выглядит скучно, но могу ошибаться

Дмитрий
08.08.2017
21:06:49
Мне со второй попытки вкатило прям нереально
Отличия от хаскеля либо в сторону сближения с жс — отличный интероп с ним и Records в виде жс объектов, либо вообще строго в лучшую сторону — Eff описывает суть побочных эффектов, в отличии от IO

Denis
08.08.2017
21:11:39
ну еффекты просто заменяют пирамидки из трансформеров монад
и у purescript их 2 основных типа Eff, Aff

andretshurotshka?❄️кде
08.08.2017
21:12:11
пурса не lazy

Denis
08.08.2017
21:12:41
и всякие cycle,repeat вроде работают

Дмитрий
08.08.2017
21:37:35
Ещё бы придумать как заставить его не тащить за собой весь prelude

Google

Дмитрий
08.08.2017
21:38:12
И можно будет писать всякие стойкие и надёжные либы для жс

Denis
08.08.2017
21:39:12
каким-нибудь treeshake

Дмитрий
08.08.2017
21:41:04
Да, в вебпаке шейкинг справляется с этим, проверяли) Но хотелось бы, чтобы в npm сразу был код с require из общего места
А то это как на втором npm, у каждой либы свой вагон нодмодулей

Denis
08.08.2017
21:43:40
ну или rollup
для библиотек очень ок

? animufag ?
08.08.2017
21:43:55

Дмитрий
08.08.2017
21:45:32
А, точно, rollup частично решит проблему) Надо попробовать

? animufag ?
08.08.2017
21:56:25
А там тоже do на монадах? Или что-нибудь похитрее чтобы можно было эффекты комбинировать

Дмитрий
08.08.2017
21:59:41
Там в обе стороны интероп крутой)
Можно объявлять foreign function, и например вынести в соседний жс файл байтоёбство с массивами

Denis
08.08.2017
22:02:18

Дмитрий
08.08.2017
22:02:46
А в обратную сторону — можно создавать как функции, так и объекты и даже традиционные классы жс прямо из пурсы

Denis
08.08.2017
22:03:55

? animufag ?
08.08.2017
22:05:19

Denis
08.08.2017
22:05:36

? animufag ?
08.08.2017
22:06:06
Ну Eff - монада?

Дмитрий
08.08.2017
22:06:20

Google

Denis
08.08.2017
22:06:39
ну и понятно что newtype класс не создаст)

Дмитрий
08.08.2017
22:08:27
Ну так то newtype

Denis
08.08.2017
22:08:31
кстати вот как можно менять поведение для do notation
http://try.purescript.org/?gist=b440b705a32377f7f7ef7257be1115e5&session=def3e2f4-cc0a-15cd-c92a-3b7e99fbd738

Дмитрий
08.08.2017
22:08:53
Слева — результат компиляции кода справа

Denis
08.08.2017
22:09:18
ааа, это я знаю) я думал оно с ключевым словом class
вот как ApplicativeDo сделать в пурсе http://try.purescript.org/?gist=91c8c58419ec2683d46b8d83eb88614c&session=542269ea-d73a-4e2f-32e4-419cc477f3a2
или вот такое http://try.purescript.org/?gist=1f78ec6ed623c294f4de55ee11ad0065&session=9ccabc1d-9290-0343-5632-35c543945109

andretshurotshka?❄️кде
08.08.2017
22:16:26
вроде хотели впилить ес модули в purescript

Дмитрий
08.08.2017
22:16:37
Разве?

Дмитрий
08.08.2017
22:16:48
Там вроде в issues написали, что им не катит

andretshurotshka?❄️кде
08.08.2017
22:16:55
?

Denis
08.08.2017
22:16:59
лучше бы генераторы впилили для некоторых кейсов)

Дмитрий
08.08.2017
22:17:08
А для каких?
Вообще генераторы — это просто имплементация протокола Iterator, поэтому можно это сделать и на purs

andretshurotshka?❄️кде
08.08.2017
22:18:14

Denis
08.08.2017
22:18:23

andretshurotshka?❄️кде
08.08.2017
22:18:59
kjk

Google

Дмитрий
08.08.2017
22:19:47
или еще более общее - рекурсивные схемы
Не, я сейчас конкретно про жс кейс, генератор implements Iterator и Iterable, Iterable имеет .next() по спеке, а Iterator возвращает { value?: T, done: boolean }
Или наоборот, забыл кто из них кто

Denis
08.08.2017
22:20:05
ну это понятно
но все это все еще императивщина правда

Дмитрий
08.08.2017
22:20:42
Ну да, поэтому и интересно стало, зачем они тебе понадобились)

Denis
08.08.2017
22:23:29
ну так интересно же))) у пурсы как и у хаскелль денотационная семантика?
если да, то это же все потом переводится в язык у которого операционная семантика)

Admin
ERROR: S client not available

Дмитрий
08.08.2017
22:31:06

Vadim
08.08.2017
22:49:50

andretshurotshka?❄️кде
08.08.2017
22:51:21
я кидал уже)

Vadim
08.08.2017
23:23:36
Не уследил )
Вчера просмотрел цикл уроков от Professor Frisby. У него там почти все примеры построены на использовании semigroup. То-есть, вместо того что б просто использовать методы, типа add(a, b), или intersection(array1, array2) он использует Add(a).concat(Add(b)) или Intersection(array1).concat(Intersection(array2)).
В чем преимущества такого подхода?
По-сути, для каждого типа операции у него создан класс семигруп. Получается более громоздко, чем использовать функции. Но в чем плюс? Когда вообще в этом может быть выигрыш?

andretshurotshka?❄️кде
09.08.2017
18:56:53
у рамды сoncat диспатчится

? animufag ?
09.08.2017
19:00:59

Vadim
09.08.2017
19:01:38
Че-то я про плюсы так и не понял )

Denis
09.08.2017
19:09:45

? animufag ?
09.08.2017
19:09:48
ну вообще сомнительная тема, да. по идее интересно пользоваться тайпклассом когда над ним определены какие-нибудь полезные операции. ну одна точно есть concat над непустым списком.
но ради этого оборачивать в фиктивный объект и потом извлекать из него значение - кажется не очень удачной идеей.

Google

? animufag ?
09.08.2017
19:11:48
мб есть какие-нибудь функции с сигнатурой там
SemiGroup a, AnotherTeorCat f => f a -> f a...
тогда может есть смысл

Denis
09.08.2017
19:12:15

? animufag ?
09.08.2017
19:12:59

Дмитрий
09.08.2017
20:48:45
Не самый изящный, конечно же

kana
09.08.2017
20:49:37
Именные инстансы - вот тема. Позволяют объявить множество реализаций семигруппы, скажем, без оборачивая в контейнер

Vadim
09.08.2017
20:50:45

Дмитрий
09.08.2017
20:52:07
Это короче что-то типа имплементации интерфейсов, со всеми объектами тайпласса semigroup можно делать такие-то операции. Просто это решение в лоб, когда ты явно создаёшь инстансы чтобы быть уверенным, что твой объект работает должным образом
Тупо как-то объясняю, но если в кратце — у него это в иллюстративных целях)

Vadim
09.08.2017
20:56:45
)

Дмитрий
09.08.2017
21:00:30
Я просто только недавно прикидывал, как это можно организовать по нормальному, и пробовал сделать имплементацию в которой все тайпклассы содержатся в одном контейнере — там сложно сделать удобным образом, появляется ряд проблем)

andretshurotshka?❄️кде
09.08.2017
21:06:02
меняй прототипы)

Дмитрий
09.08.2017
21:16:20
Ну там несколько сложнее получается
Но относительно простой случай — Either — уже получился без противоречий, и даже тип выводит идеально

Denis
09.08.2017
21:20:53
функции высшего порядка это функции чтобы создавать функции)))
это дерьмо я тут услышал (вообще какое-то сомнительное видео) https://www.youtube.com/watch?v=BT7KnY6a_24&feature=em-subs_digest

? animufag ?
09.08.2017
23:18:54