Влод
Если ты задаёшь вопрос как бы подразумевая ответ, что делают, то ответь на вопрос где может быть Nothing не зависящий от входных параметров
Влод
ну хотя у меня у самого начал ответ представляться (но не это слабый вариант)
igo
Если ты задаёшь вопрос как бы подразумевая ответ, что делают, то ответь на вопрос где может быть Nothing не зависящий от входных параметров
Функции чистые и детерменированные (если они не в IO), то есть результат напрямую зависит от входных аргументов. Nothing здесь не при чем.
Влод
Тогда при чём тут эффекты
igo
я хз вообще :D
igo
эффекты это же другой подход, немонадный
Alexander
тут уже все смешалось походу :)
igo
есть монады State / Writer — вот они с побочными эффектами, так как изменяют какое-то состояние. Но тут оговорка, потому что функции, которые возвращают результат в такой монаде, являются чистыми. Внешний мир не изменяют, только внутреннее состояние.
igo
типа как у них конечно у всех сайд эффекты, но у IO совсем сайд
у IO сайд эффект выражается в изменениях во внешнем мире.
igo
у Maybe это выражается в возможности вернуть ошибку как результат.
igo
это тоже "сайд эффект", потому что в норме, всегда, мы возвращаем один результат, одно значение. √4 = 2 — просто целые числа, и всё.
Влод
ладно ок
igo
а тут пришёл maybe и сказал, что будет подмешивать в результат функций ещё и ошибку, если она возникнет
igo
я вообще, честно, не понимаю, в чем цимес
Влод
следущий раз когда спросят про сайд эффекты скажу им чтобы думали в следущем ключе: если нечто в норме, то сайд эффектов нет
Влод
иррациональные числа совершенно не в норме
Влод
очевидно это сайд эффект
igo
меня вот в хаскель мире не радует какая-то закрытость что ли.
igo
вот смотрю я библиотеку на гитхабе.
igo
автор красавчик — пишет на хаскеле.
igo
и даже документацию написал с горем пополам.
igo
но она какая-то грустная, примеров нет, в lts свежей версии нет, почти наверняка понадобятся танцы с бубном и время чтобы разобраться.
igo
в итоге всё скатывается к прочтению сорцев.
igo
какая-то либа уже давно не поддерживается, другая умерла, ну и все в таком роде.
Мерль
Имхо это проблема всех непопулярных открытых проектов с одним автором
Влод
Это тут не причем
ну также как Nothing для Maybe Int является одним из конструкторов также и иррациональные числа конструируют Complex
Влод
это тоже "сайд эффект", потому что в норме, всегда, мы возвращаем один результат, одно значение. √4 = 2 — просто целые числа, и всё.
Alexander
Не совсем тебя понял. Конструктор Nothing в Maybe собственно и моделирует эту возможность/сайдэффект ошибки
Нурлан
В >>= нет
Хочешь сказать что выход за область определения тоже эффект?
Alexander
Щас до дома дойду, мне холодно тут правильно мысль конструировать чтобы к словам не докапались
Alexander
Тут эффект это частичное вычисление, а maybe это средство его capture
Alexander
Т.е. да int int -> Maybe int без эффектов, т.к. эффект захвачен
Alexander
В наш вычислительный контекст
Мерль
Господа, я вас на понимаю Разве side effects - это не когда результат выполнения функции зависит не только от её аргументов?
Влод
Не совсем тебя понял. Конструктор Nothing в Maybe собственно и моделирует эту возможность/сайдэффект ошибки
Такие слова меня устраивают. Выражаясь через "могут представить", "моделируют", "имеет достаточную выразительную мощность" ты как бы показываешь что там автоматически не происходят какие-то эффекты. Выражаясь через "Nothing это сайд эффект потому что он не в норме" ты добавляешь какую-то магию
Alexander
Ну да, это же дословно было сказано в переводе цитаты сегодня днем
Влод
ну только цитата наделена чуть большей магией
Влод
ещё раз её сюда приведу
Влод
> Effects are a classification of computations independent of the ex- plicit inputs and outputs of those computations. из Tate
Влод
Итак как это происходит
Влод
функция принимает инпут, парочку чисел
Влод
у функции может быть детерменированный результат (но это не обязательно, такого условия нет! но может быть и детерменированный)
Влод
1 + 1 = 2 (лол случайно 4 написал, могло сбить с толку)
Влод
а теперь понеслась магия побочных эффектов
Alexander
Если функция складывает 2 числа, то в чем ее сайд эффект? Нет смысла возвращать из нее Maybe Int
Влод
она в это время пока считает, вычисляет положение луны и её фазу, всё это перемножает на разные вектора и творит полный беспредел, который мы в общем не знаем
Влод
это моё понимание фразы "вычисление независимое от явных инпутов и оутпутов"
Влод
а функция с сайд эффектами, та где например нам не хватило оперативы для вычисление и такое явление как нехватка оперативы выражено через Nothing
Влод
ну вы поняли про какой head я имел ввиду
Alexander
Вы это осторожнее с Nothing, т.к. мейби это решение для перевода частичной функции в полную, т.е. захват сайд эффекта функции
Мерль
это моё понимание фразы "вычисление независимое от явных инпутов и оутпутов"
На самом деле можно сказать так: чистая функция - это сюръективное отображение множества аргументов на множество возвращаемых значенией.
Мерль
и фсё
Влод
сюръективное что-то такое было. взаимооднозначное?
Мерль
Нет
Ilya
сюръективное - это когда покрывается всё множество значений
Мерль
Щас поищу
Ilya
и это тут не в кассу
Ilya
напримерь модуль не сюръективен из R в R
Ilya
но разве это не чистая функция?
Мерль
Чёрт
Мерль
илья прав
Влод
а по картинке модуль вроде подходит
Мерль
Тогда можно сказать так: любому набору аргументов соответсвует одно возвращаемое значение (но не наоборот, то есть это не однозначное отображение)
Влод
print 1 » pure $ 1 чистая?
Мерль
а по картинке модуль вроде подходит
Неа Если функция определена как R -> R+ (то есть рациональные числа в положительные рациональные числа), тогда да, сюръективна
Евгений
Всмысле, a -> Maybe b превращает частичную функцию a -> в нормальную. Частичная значит "не для всех а определено значение функции". Характерный пример -- любая частично-рекурсивная функция, не являющаяся тотальной
Влод
а понял
Ilya
это просто отображение:)
Ilya
отображение как раз и сопостовляет одному аргументу - всегда одно и то же значение
Ilya
по своему определению
Ilya
и биективность, сюръективность, инъективность - это уже доп. свойства
Влод
это просто отображение:)
кстати так и не понял на курсе матана, чем отображение обобщает термин "функция"