@scala_ru

Страница 345 из 1499
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 секунд туда-сюда летают монад-трансформеры, везде типы с дырками и объявляется что это очень удобно и просто :(

Kirill
18.12.2016
15:57:22
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) ) ) считается чистой или детерминистичной? в этом конкретном примере не дается интерпретатора, а от него все и зависит

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

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

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

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

KrivdaTheTriewe
18.12.2016
16:53:16
http://docs.scala-lang.org/style/
датабрикс гайды ты конечно же видел (:

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

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

Но датабриксовский уж слишком жёсткий

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 схему из неё

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?

Kirill
18.12.2016
18:32:35
Касательно пункта б) Только map
разве в определении монады не pure и flatMap ?

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

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

point/flatMap за тебя реализует Free
Мы говорим о конкретном каком-то библиотечном free или о том, который я сам должен сделать?

Oleg
18.12.2016
18:34:47
Kirill
18.12.2016
18:35:31
Без разницы. Можешь юзать из scalaz/cats, можешь сам написать
Ну да, я понял. Просто вроде понятные пункты из того, что я выше написал, в туториалах ВНЕЗАПНО превращаются в гору магических импортов из scalaz, которые делают какую-то магию

Oleg
18.12.2016
18:50:48
Ну да, я понял. Просто вроде понятные пункты из того, что я выше написал, в туториалах ВНЕЗАПНО превращаются в гору магических импортов из scalaz, которые делают какую-то магию
думаю, есть множество либ, которые сложны, иногда непреодолимо сложны для тех, кто не испытывал боль, которую они решают

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

мы же можем выразить map через flatMap и pure по идее
Классическая Free[F, ?] является монадой если F - функтор, при этом для любой F можно обернуть в койонеду и получить функтор, чтобы этого не делать каждый раз, койонеду добавили во Free третим членом ADT.

Советую ради интереса начать с 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 кеши, а регистром что называют?

К соажалению, мой кубунту сегодня умер и я не смогу нагуглить и показаться умным.

Страница 345 из 1499