
Nick
18.12.2016
15:22:35
иногда нужна мотивация) и может быть даже компаньен

KrivdaTheTriewe
18.12.2016
15:22:39
Так то я скалолазанием занимаюсь

Nick
18.12.2016
15:23:05
и там на скале пишешь на скале

KrivdaTheTriewe
18.12.2016
15:23:44
Не, на скалы иногда езжу:)

Google

Kirill
18.12.2016
15:56:25
блин, как-то странно смотрятся доклады про фри монады, решил ознакомиться, просмотрел доклад с scala days, сначала тебе базовые понятия монад и функторов объясняют, а потом резко бах - и вот уже через 30 секунд туда-сюда летают монад-трансформеры, везде типы с дырками и объявляется что это очень удобно и просто :(

KrivdaTheTriewe
18.12.2016
15:57:13

Kirill
18.12.2016
15:57:22

Aleksei
18.12.2016
16:12:42
http://degoes.net/articles/easy-monads
тут была уже эта ссылка

Kirill
18.12.2016
16:33:44
прочитал с underscore статью, там тоже "вот определение, а теперь мы возьмем кучу штук из scalaz и их применим, и всё сразу круто"

Grigory
18.12.2016
16:44:04
С Майлзом не так много фоточек в интернете ):

Daniel
18.12.2016
16:46:24

Oleksandr
18.12.2016
16:46:31
http://degoes.net/articles/easy-monads
а почему штука типа
def socialProgram: ConsoleIO = WriteLine(
"Hello, what is your name?",
ReadLine(name =>
WriteLine("Hello, " + name + "!", End)
)
)
считается чистой или детерминистичной?
в этом конкретном примере не дается интерпретатора, а от него все и зависит

Grigory
18.12.2016
16:47:32

KrivdaTheTriewe
18.12.2016
16:47:40
скоро я внедрю где-нибудь шейплесс и стану четвертым

Grigory
18.12.2016
16:47:48
? можно удалить

Google

Oleksandr
18.12.2016
16:49:44

KrivdaTheTriewe
18.12.2016
16:49:47
Использует ли кто в свсоей команде публичный кодингстайл для скалы, к примеру тот что у ребят из датабрикса ( забудь скалу всякий сюда входящий ) или еще что-то ?

Grigory
18.12.2016
16:51:07
http://docs.scala-lang.org/style/

Aleksei
18.12.2016
16:51:07
мы всегда возвращаем ИО

KrivdaTheTriewe
18.12.2016
16:53:16

Grigory
18.12.2016
16:53:27

Oleksandr
18.12.2016
16:54:09
мы всегда возвращаем ИО
то есть, если придираться, то оно чистое и детерминистичное, потому что ничего само по себе не делает? :)

KrivdaTheTriewe
18.12.2016
16:54:34
я активно пиарил хоть какой-нибудь у нас в свое время, прост в одном месте better java в другом резко scalaz выглядывает
Но датабриксовский уж слишком жёсткий

Aleksei
18.12.2016
16:59:14

Oleksandr
18.12.2016
17:01:42
я не понимаю как вы не понимаете =)
в статье выше, задается некая последовательность вызовов кейс классов / функций, которая представляет собой АСТ, который потом разбирает некий интерпретатор
но сама по себе она не имеет большого смысла =>? именно поэтому считается чистой/детерминистичной?
конкретно, меня смущает, что созданный АСТ обзывается чистым, это парадокс — он ведь ничего и не делает
(небольшая придирка к статье, в общем)

Aleksei
18.12.2016
17:03:21
ну я ж не де гоес
у меня похмел жесткий, но вообще да
примерно что ты сказал то и есть

Oleksandr
18.12.2016
17:03:59
а, ну окей)

Aleksei
18.12.2016
17:06:23
я просто сам только начинаю в это лезть, так что мое мнение строго такое что наша алгебра чистая, а интерпретатор там пусть хоть в говне изваляется =)

Oleksandr
18.12.2016
17:06:52
ну да, просто странно обзывать именно АСТ чистым

Google

Oleksandr
18.12.2016
17:07:04
конечно, он чистый, потому что ничего не делает

Denis
18.12.2016
17:25:15

Aleksei
18.12.2016
17:39:00
наверное это называется как нибудь типа "алгебра" =)

Denis
18.12.2016
17:44:31
Алгебра это компоненты композиции

Oleg
18.12.2016
17:45:50
> компоненты композиции

Dmitry
18.12.2016
17:51:02
нену а чо
норм же
наверн можно еще сказать "словарный запас" :)

Oleg
18.12.2016
17:51:55
да, сумманты суммы

Dmitry
18.12.2016
17:52:26
вот алгебра эллочки была не очень обширной

Oleksandr
18.12.2016
17:53:55
не говорила она "железно" /=

Dmitry
18.12.2016
17:54:55
трудности перевода

Oleg
18.12.2016
17:55:27
Поэтому мы пишем приложение так, что как можно больше его частей остаётся гарантированно нередвзятой и иногда до глупости простой
Такую структуру не обязательно пускать в основной интерпретатор, чтобы протестировать.
Т.е. ты можешь сделать множество способов "запустить" свою логику. В каком-то она крутится в твоих route, кидает эксепшны и отсылает логи куда-то.

Nick
18.12.2016
17:58:52
интерпретатор
я один сразу о другом думаю?

Oleg
18.12.2016
18:01:17
В каком-то она верифицируется синхронно в юнит-тестах.
В каком-то очень вербозно даёт поиграться с собой в консольке. В каком-то обрабатывает распердоленные коллекции в спарке.

Google

Oleg
18.12.2016
18:05:08
Все детали обработки - ошибки, логи, способ получения данных не пришиты к логике. Она существует независимо и прекрасно в своей бессмысленности и чистоте.

Andrey
18.12.2016
18:05:30
А еще эти "способы" можно подвергать композиции
Что доставляет существенно

Admin
ERROR: S client not available

Kirill
18.12.2016
18:06:10
А какие-нибудь примеры из реального мира кроме консоли можешь привести? не могу придумать на ходу

Oleg
18.12.2016
18:07:06
Мы про фримонаду?
Наверное, я сталкивался только с теми четырьмя. Т.е.
1. ad-hoc
2. debug
3. testing
4. vectorization/batch processing
Плюс разнообразная оптимизация с помощью Free+Coyoneda или Trampoline
Но минус фримонад в их как раз неалгебраичности
Т.е. в игре всегда части вроде A => Free[F, B]
Это может быть существенным минусом, когда ты хочешь "проанализировать" построенную структуру, не запуская ничего, к примеру, чтобы построить swagger схему из неё

Andrey
18.12.2016
18:21:54

Oleg
18.12.2016
18:23:12
как решить?
Для просто структур, которые не предполагают композиции, можно заюзать Free Applicative
Для случаев вроде HTTP route, где есть необходимость делать разветвления в процессе обработки запроса, нужно либо что-то вроде servant, либо если не переходить на уровень типов, какой-то Free Arrow
Но даже если ты придумаешь Free Arrow, какого-то arrow for-comprehension, как в Haskell ты не дождёшься, и твой DSL будет очень мрачной нечитаемой математизированной фигнёй
Либо раздутой хернёй, как akka streams graph DSL

Kirill
18.12.2016
18:30:56
То есть по сути всё сводится к тому чтобы а) определить AST для своей предметной области б) задать в нем операции типо map, flatMap, итд в) написать интерпретатор, который будет делать что-то конкретное разбирая твой AST?

Oleg
18.12.2016
18:32:17

Kirill
18.12.2016
18:32:35

Oleg
18.12.2016
18:32:55
point/flatMap за тебя реализует Free

Google

Kirill
18.12.2016
18:33:06
мы же можем выразить map через flatMap и pure по идее

Oleg
18.12.2016
18:34:47

Kirill
18.12.2016
18:35:31

Oleg
18.12.2016
18:50:48

Viacheslav
18.12.2016
19:18:43
посоны, кто-нибудь юзал, как впечатления? https://www.pramp.com/invt/3xKJK6zWABsvzMQMG9yb

Denis
18.12.2016
19:53:25
Вот тут про free applicatives хорошо рассказаноhttps://m.youtube.com/watch?v=H28QqxO7Ihc
Советую ради интереса начать с Free[F[_], A] = Pure[A](a: A) | Bind[F[_], A](fa: F[Free[F, A]]) и добавить все известные операции

Nick
18.12.2016
20:50:55
Мне вот интересно, а вам не жалко производительности на эт, это ж виртуальный вызов?

Wystan
18.12.2016
20:57:45
Константы считать - на скале не кодить.
Ты еще у актора подсчитывай место, которые переменные занимают, чтобы на уровне кеша проца каждый тред читал регистр целиком и они бы не пересекались.

Nick
18.12.2016
21:00:07
А что регистр можно прочитать не целиком?)
Я думаю ты хотел написать всеж кэшлаин

Wystan
18.12.2016
21:01:18
Ну я про л1 л2 кеши, а регистром что называют?
К соажалению, мой кубунту сегодня умер и я не смогу нагуглить и показаться умным.