Как и многие безрассудные пионеры передо мной, я пытаюсь пересечь бескрайние пустыни, которые понимают Монады.
Я все еще ошеломляю, но не могу не заметить некоторого монад-подобного качества в инструкции Python with
. Рассмотрим этот фрагмент:
with open(input_filename, 'r') as f:
for line in f:
process(line)
Рассмотрим вызов open() как "unit" и сам блок как "bind". Фактическая монада не отображается (мм, если f
- монада), но шаблон есть. Не так ли? Или я просто принимаю все FP за монады? Или это всего лишь 3 часа ночи, и что-то кажется правдоподобным?
Связанный вопрос: если у нас есть монады, нужны ли нам исключения?
В приведенном выше фрагменте любая ошибка в операции ввода-вывода может быть скрыта от кода. Повреждение диска, отсутствие именованного файла и пустой файл можно обрабатывать одинаково. Поэтому нет необходимости в видимом исключении IO.
Конечно, Scala Option
typeclass устранил опасное исключение Null Pointer. Если вы переосмысливаете числа как Monads (с NaN и DivideByZero в качестве особых случаев)...
Как я уже сказал, 3 утра.