Size: a a a

2021 April 27

TK

Traveller Kolsky in rust_offtopic
Реальность такова, что побочные эффекты нужны, они просто отложены. В случае с хаскелем - аж до запуска программы.
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
Use a do binding when you want to execute code independently of a function or value definition. The expression in a do binding must return unit.
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
где оно есть-то?
источник

DS

Doge Shibu in rust_offtopic
Неправильно рассматривать чисто техническую конструкцию как какие-то рецепты или другие аналогии.

Давай посмотрим как IO устроен: это банально тип вида
newtype IO a
 = GHC.Types.IO (GHC.Prim.State# GHC.Prim.RealWorld
                 -> (# GHC.Prim.State# GHC.Prim.RealWorld, a #))


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

DS

Doge Shibu in rust_offtopic
Смотри CE
источник

DS

Doge Shibu in rust_offtopic
источник

TK

Traveller Kolsky in rust_offtopic
Кто-то должен быть грязным. Это RealWorld, значит.
источник

TK

Traveller Kolsky in rust_offtopic
На уровне типов он чист
источник

TK

Traveller Kolsky in rust_offtopic
На уровне выше уже нет
источник

DS

Doge Shibu in rust_offtopic
Нет, просто ссылочная прозрачность - это вполне строго определенное и формальное свойство, и надо пользоваться им, а не какой-то мифической "чистотой" и "грязнотой"
источник

DS

Doge Shibu in rust_offtopic
То что обычно понимают под чистым кодом - это формально обычно ссылочно прозрачный код
источник

DS

Doge Shibu in rust_offtopic
И именно об этом и надо говорить
источник

TK

Traveller Kolsky in rust_offtopic
Вот я тебя и спрашиваю, как рантайм не может быть грязным (исполнять побочные эффекты), если IO-монада чистая (работает с преобразованием старого состояния в новое)?
источник

DS

Doge Shibu in rust_offtopic
Потому что тут надо говорить не про побочные эффекты, а про ссылочную прозрачность
источник

DS

Doge Shibu in rust_offtopic
Про то, изменится ли поведение программы, если заменить вызов функции на возвращаемое ей значение.
источник

TK

Traveller Kolsky in rust_offtopic
Ссылочная прозрачность есть? Есть. Повторный вызов одной и той же IO функции приводит к разным результатам? Приводит.
источник

TK

Traveller Kolsky in rust_offtopic
Можно ли заменить вызов IO на значение? Нет, нельзя.
источник

TK

Traveller Kolsky in rust_offtopic
В теории максимум можно
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
источник

ΑZ

Αλεχ Zhukovsky in rust_offtopic
вот настолкьо сложно ИО сделать
источник