«Исключения» Haskell

У меня есть набор пользователей, групп и сопоставление между пользователями и группы. У меня есть различные функции, которые манипулируют этими наборами, однако нельзя добавить сопоставление пользователь <-> группа для пользователя, который не существует, или удалить группу, в которой все еще есть пользователи в качестве членов, и т. д.

Итак, в основном Я хочу, чтобы эти функции генерировали «исключения», которые должны быть явно обработаны вызывающей стороной.

Сначала я подумал о том, чтобы вернуть что-то вроде этого:

data Return r e = Success r | Exception e

И если вызывающий объект не сможет сопоставить шаблон с Exception, он, надеюсь, получит предупреждение компилятора или, по крайней мере, будет иметь очевидное ошибка времени выполнения, когда есть проблема.

Является ли это лучшим подходом и существует ли готовое решение для этого? Примечание. Мне нужно генерировать и перехватывать «исключения» в чистом коде, а не в монаде ввода-вывода.

14
задан Clinton 16 May 2012 в 02:49
поделиться