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