Является ли Python монадическим «с»?

Как и многие безрассудные пионеры до меня, я пытаюсь пересечь бездорожную пустошь, которая называется Пониманием Монад.

Я все еще колеблюсь, но не могу не заметить определенного монадного качества в операторе Python with . Рассмотрим этот фрагмент:

with open(input_filename, 'r') as f:
   for line in f:
       process(line)

Рассмотрим вызов open () как «единицу», а сам блок как «привязку». Фактическая монада не отображается (ну, если только f не является монадой), но шаблон присутствует. Не так ли? Или я просто принимаю все FP за монадрию? Или это всего лишь 3 часа ночи, и все кажется правдоподобным?

Связанный с этим вопрос: если у нас есть монады, нужны ли нам исключения?

В приведенном выше фрагменте любой сбой ввода-вывода можно скрыть от код. Повреждение диска, отсутствие указанного файла и пустой файл можно рассматривать одинаково. Так что нет необходимости в видимом исключении ввода-вывода.

Конечно, класс типов Scala Option устранил ужасное исключение нулевого указателя . Если вы переосмыслите числа как монады (с NaN и DivideByZero в качестве особых случаев) ...

Как я уже сказал, 3 часа ночи.

35
задан Malvolio 23 March 2018 в 13:22
поделиться