На самом деле это всё херня. Если все типы exception'ов рассовывать по монадам и монадами монады погонять, получится такой же говнокод с обилием синтаксического мусора для избежания NPE, только на хаскелле. Там это всё вольётся в типы, liftM и прочую херню.
Так делать нельзя.
Лучше это делать как в Agda, попросту включив ограничения на аргументы функции в её тип. Факториал просто будет определён на int'ах от 0 до 12.
Или хотя бы сделать исключения эффектами и воспользоваться языком с системой эффектов и effect inference.
no subject
Date: 2012-02-03 05:10 pm (UTC)Так делать нельзя.
Лучше это делать как в Agda, попросту включив ограничения на аргументы функции в её тип. Факториал просто будет определён на int'ах от 0 до 12.
Или хотя бы сделать исключения эффектами и воспользоваться языком с системой эффектов и effect inference.