Size: a a a

2019 December 30

АН

Авроамэриканец Начрэл in ErlangRus
Иλьямбда
Нет никаких IO функций, есть функции, возвращающие значения типа IO a
Если прямо сейчас сделать запрос на random.org, то чему будет равно значение типа IO?

Не можешь сказать точно? Значит функция не детерменирована
источник

LW

Lev Walkin in ErlangRus
Авроамэриканец Начрэл
Если прямо сейчас сделать запрос на random.org, то чему будет равно значение типа IO?

Не можешь сказать точно? Значит функция не детерменирована
Я могу точно сказать: она даже не полезет на random.org
источник

И

Иλьямбда in ErlangRus
Авроамэриканец Начрэл
Если прямо сейчас сделать запрос на random.org, то чему будет равно значение типа IO?

Не можешь сказать точно? Значит функция не детерменирована
Значение типа IO это последовательность инструкций для рантайма хаскеля
источник

NV

Nikita Vilunov in ErlangRus
Я даже скажу, что функция, которая лезет на rambler.org, и возвращающее число, — это и не функция вовсе, это просто значение типа IO Int
источник

И

Иλьямбда in ErlangRus
Именно так, f :: IO Int не полезет ни на какой сайт, это сделает только рантайм хаскеля, когда будет исполнять эту последовательность инструкций
источник

И

Иλьямбда in ErlangRus
По сути, IO a это просто SomeStateTokenType -> (a, SomeStateTokenType)
источник

АН

Авроамэриканец Начрэл in ErlangRus
А функции существуют только на стадии компиляции?
источник

NV

Nikita Vilunov in ErlangRus
Иλьямбда
По сути, IO a это просто SomeStateTokenType -> (a, SomeStateTokenType)
Это деталь имплементации, не надо объяснять это новичкам, а то наш Рамблер и так сильно запутался
источник

LW

Lev Walkin in ErlangRus
Авроамэриканец Начрэл
А функции существуют только на стадии компиляции?
нет, в рантайме тоже есть, то есть, функция может довычислить что-то и вернуть результат в IO
источник

LW

Lev Walkin in ErlangRus
Вот пример, что вернёт функция:
источник

NV

Nikita Vilunov in ErlangRus
Меня больше напрягает, что вы все еще ведете эту беседу в чате по Эрлангу
источник

AB

Alex Bubnov in ErlangRus
Иλьямбда
Именно так, f :: IO Int не полезет ни на какой сайт, это сделает только рантайм хаскеля, когда будет исполнять эту последовательность инструкций
я бы тогда сказал "эту инструкцию", чтобы не путать с инструкциями проца
источник

LW

Lev Walkin in ErlangRus
f = (print “a”, print “b”)
источник

LW

Lev Walkin in ErlangRus
эта функция выполнится хаскелем, но на экран ничего не выведет
источник

LW

Lev Walkin in ErlangRus
потому что она возвращает две инструкции, как выводить a и b, но не исполняет их.
источник

АН

Авроамэриканец Начрэл in ErlangRus
Lev Walkin
нет, в рантайме тоже есть, то есть, функция может довычислить что-то и вернуть результат в IO
А как взаимодействовать с ответом?
Я прошу у функции предоставить мне содержимое страницы random.org, мне возвращается IO значение. Что дальше? Мне из IO значения доставать данные?
источник

И

Иλьямбда in ErlangRus
Nikita Vilunov
Это деталь имплементации, не надо объяснять это новичкам, а то наш Рамблер и так сильно запутался
Лучше как раз объяснять через токены. Тогда нетривиальность функции объяснить очень просто: при каждом вызове рантайм передаёт ей новый токен (да, на самом деле такого не происходит, но как ментальная модель сойдёт)
источник

AB

Alex Bubnov in ErlangRus
Nikita Vilunov
Меня больше напрягает, что вы все еще ведете эту беседу в чате по Эрлангу
ну так-то беседа ведется вполне корректно, плюс довольно занятная
источник

NV

Nikita Vilunov in ErlangRus
Авроамэриканец Начрэл
А как взаимодействовать с ответом?
Я прошу у функции предоставить мне содержимое страницы random.org, мне возвращается IO значение. Что дальше? Мне из IO значения доставать данные?
Нет, из IO нельзя достать данные. Можно скомпозить его с другой функцией через fmap или >>=
источник

LW

Lev Walkin in ErlangRus
Авроамэриканец Начрэл
А как взаимодействовать с ответом?
Я прошу у функции предоставить мне содержимое страницы random.org, мне возвращается IO значение. Что дальше? Мне из IO значения доставать данные?
есть два варианта: попросить рантайм хаскеля выполнить эти инструкции. То есть, вызвать эту вашу функцию из main (топ левел в хаскеле). Либо через unsafe. Других вариантов нет.
источник