Size: a a a

2020 November 19

V0

Vlad 0xd728c4a7cd55d... in Haskell
Есть ли способ избавиться от IO в сигнатуре, если мы read-only из чего-то ipfs-подобного?
Я понимаю, что сеть ненадежна, но нельзя ли в случаях ошибки хардвари просто упасть, или erlang-style тут не в почете?
Короче, хочется воспринимать ф-ю с таким чтением как чистую, обращающуюся к константе в типа-ооооочень-медленной-памяти?
источник

MP

Misha Puzanov in Haskell
можно, через unsafePerformIO
источник

MP

Misha Puzanov in Haskell
но как обычно, это очень сильно не рекомендуется делать
источник

MP

Misha Puzanov in Haskell
как минимум потому, что из-за ленивости исключение вылетит в совершенно произвольный момент
источник

MP

Misha Puzanov in Haskell
вернее не "произвольный", а очень неожиданный
источник

MP

Misha Puzanov in Haskell
короче говоря, это с вероятностью 99% будет плохой дизайн
источник

к

кана in Haskell
Misha Puzanov
но как обычно, это очень сильно не рекомендуется делать
очень сильно не рекомендую считать, что это очень сильно не рекомендовано
источник

к

кана in Haskell
нормальная практика, главное знать что делаешь
источник

к

кана in Haskell
и проставить правильно инлайн/ноинлайн аннотации
источник

к

кана in Haskell
ну чаще всего ноинлайн в этом случае
источник

к

кана in Haskell
другое дело что это редко нужно
источник

к

кана in Haskell
обычно нет проблемы прочитать в io и закинуть значение в ридер/имплиситы
источник

к

кана in Haskell
монады-то для этого и нужны
источник

MP

Misha Puzanov in Haskell
кана
нормальная практика, главное знать что делаешь
ну это такая универсальная оговорка, когда направляешь дробовик в сторону ноги

я это видел только в наборе ограниченных кейсов, для производительности, когда хочется соъранить чистый API (типа xeno какого-нибудь), для глобальных переменных (это вроде паттерн даже), да и все в общем-то
источник

к

кана in Haskell
ну в основном глобальные переменные я и подразумеваю
источник

MP

Misha Puzanov in Haskell
в данном случае сложная система, которая что-то там читает из сети — ну такоэ
источник

к

кана in Haskell
тут вроде как такой же кейс, просто глобальная константа, которая извне
источник

к

кана in Haskell
она правда поэтому и не константа
источник

к

кана in Haskell
возможно этот кейс можно решить просто в компайлтайме темплейт-хаскелем, ну вдруг
источник

MP

Misha Puzanov in Haskell
фиг знает, но судя по вопросу, я бы точно не стал делать фейковые чистые значения в данном случае
источник