JS
We must note the crucial difference between
throw e :: a and
throwIO e :: IO a, which is exactly the difference between
evaluation and
execution: evaluation triggers exception in the case of throw e, while execution (when the magical state “goes through” throwIO) triggers exception in the case of throwIO e.
Что значит "evaluation triggers exception in the case of throw e"? У меня есть чистая функция, в которой я видимо должен использовать throw. Я так понимаю evaluation это сведение выражения к слабой головной и если в процессе сведения встретится throw, то все выражение подменится на "a", который выдал throw, но программа не упадет, а если каким либо боком при сведении ветка с throw не будет использована, то исключение проглотится. Так? И узнать я про то, что было исключение могут только в IO. Если этот throw где-то в глубине был, то какими механизмами это "a" протянется через весь стек, это внутренняя реализация?
нет, исключение не будет рождено, следовательно, и проглочено не будет