Size: a a a

Scala User Group

2020 January 24

Oℕ

Oleg ℕizhnik in Scala User Group
используя структуры данных вроде IO вы оказываетесь в некотором Эдеме чистых значений, пока ваш код не содержит ни одной опасной операции, вы можете расчитывать, что состояние системы, в которой происходит композиция для вас не важно, методы не имеют прекондишенов и сайд эффектов  и т.п.
источник

Oℕ

Oleg ℕizhnik in Scala User Group
в этом безопасном пространстве вы можете сделать как можно больше, и в самом конце запустить исполнение
источник

λ

λλ in Scala User Group
def x:Io[unit] = throw new outofmemmoryerror
источник

ΛВ

Λнтон Войцишевский in Scala User Group
Oleg ℕizhnik
равенство двух элементов IO[A] подразумевает "процессы произведут одинаковое воздействие на систему, т.е. из одного стартового состояния система придёт в одно конечное состояние и произведённые результаты, если будут успешно построены будут равны"
В красной книжке писали про ИО как про описание программы, а запуск конкретного значения типа ИО  -- выполнение этой программы. Тогда два куска кода, завернутых в ИО, будут всегда одинаковыми, ведь это просто описания, как условный код текстом
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Λнтон Войцишевский
В красной книжке писали про ИО как про описание программы, а запуск конкретного значения типа ИО  -- выполнение этой программы. Тогда два куска кода, завернутых в ИО, будут всегда одинаковыми, ведь это просто описания, как условный код текстом
нет, не всегда
источник

Oℕ

Oleg ℕizhnik in Scala User Group
только если они описывают одинаковый процесс
источник

ΛВ

Λнтон Войцишевский in Scala User Group
Oleg ℕizhnik
только если они описывают одинаковый процесс
ну, два одинаковых куска кода с учетом замыканий
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Разница примерно такая же, как если бы вы управляли боевой операцией на ближнем востоке прямо на месте событий, либо из удобного штаба в лондоне письменно.

Пока вы в штабе, вы пишете на бумажках, эти бумажки можно скопировать, можно передумать и выбросить, можно придумать процесс, который запрашивает новую бумажку из штаба, если происходит что-то необычное...
Если вы в зоне боевых действий - все ваши решения окончательны, отменить совершённое невозможно
источник

Oℕ

Oleg ℕizhnik in Scala User Group
В конечном итоге вам нужно учитывать семантику уже композируемых процессов
источник

AY

Aleksey Yakushev in Scala User Group
Аналогии - это прекрасно для понимания.
источник

Oℕ

Oleg ℕizhnik in Scala User Group
И, несомненно, если вы пишете код через ИО, это не делает грязные процессы чистыми, всё, что должно произойти - произойдёт, все эффекты должны быть применены, все особенности состояния должны быть учтены точно так же
Но пока вы композируете простые данные с использованием чистых тотальных функций, у вас больше возможностей для манёвра
источник

Oℕ

Oleg ℕizhnik in Scala User Group
Поэтому можно сказать, что иногда программа на чистом языке нужна только для того, чтобы написать ещё одну программу на не очень чистом языке, которая будет исполнена на следующем шаге.
Именно такой промежуточной программой и является значение типа IO
Отчасти вы правы, когда говорите "в реальности там будет грязь и эффекты"
Просто тут есть ещё одна промежуточная реальность, где их нет.
источник

AY

Aleksey Yakushev in Scala User Group
Олег, спасибо. Последний вопрос по теме, что бы посоветовали почитать в первую очередь, начинающему, чтобы лучше понять вопрос?
источник

SA

Sergey Alaev in Scala User Group
реквестирую помощь теоретиков.
дубивский Transactor[M[_]] - это тайпкласс или нет?
источник

λ

λoλcat in Scala User Group
Нет
источник

DZ

Dmitry Zuev in Scala User Group
Sergey Alaev
реквестирую помощь теоретиков.
дубивский Transactor[M[_]] - это тайпкласс или нет?
мне казалость это элиас над натуральной трансформацией всего лишь
источник

λ

λoλcat in Scala User Group
Это не алиас
источник

λ

λoλcat in Scala User Group
И не тайпкласс
источник

λ

λoλdog in Scala User Group
он зависит от M
источник

λ

λλ in Scala User Group
от меня ниче не зависит
источник