История изменений
Исправление quasimoto, (текущая версия) :
Дальше — чистых функций может быть не меньше грязных, их нужно различать на уровне семантики, документации, знания поведения. Дальше — pure это атрибут, такой же как const или noexcept, из его присутствия следует возможность делать CSE, его статические проверки были бы полезны.
Я уже утерял нить дискуссии. Кто кому что доказывает?
Нить про
int x = 0;
int f(int a) {
return a + x;
}
x :: Ref Int
x <- new 0
f :: Int -> IO Int
f a = (a+) <$> get x -- a + x with generalized (+)
и вопрос являются ли такие f чистыми (очевидно, нет, в одном случае понятно почему, в другом — сфига ли оно тогда в IO).
Исходная версия quasimoto, :
Дальше — чистых функций может быть не меньше грязных, их нужно различать на уровне семантики, документации, знания поведения. Дальше — pure это атрибут, такой же как const или noexcept, из его присутствия следует возможность делать CSE, его статические проверки были бы полезны.
Я уже утерял нить дискуссии. Кто кому что доказывает?
Нить про
int x = 0;
int f(int a) {
return a + x;
}
x :: Ref Int
x <- new 0
f :: Int -> IO Int
f a = (a+) <$> get x
и вопрос являются ли такие f чистыми (очевидно, нет, в одном случае понятно почему, в другом — сфига ли оно тогда в IO).