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