У меня есть набор пользователей, групп и сопоставление между пользователями и группы. У меня есть различные функции, которые манипулируют этими наборами, однако нельзя добавить сопоставление пользователь <-> группа для пользователя, который не существует, или удалить группу, в которой все еще есть пользователи в качестве членов, и т. д.
Итак, в основном Я хочу, чтобы эти функции генерировали «исключения», которые должны быть явно обработаны вызывающей стороной.
Сначала я подумал о том, чтобы вернуть что-то вроде этого:
data Return r e = Success r | Exception e
И если вызывающий объект не сможет сопоставить шаблон с Exception
, он, надеюсь, получит предупреждение компилятора или, по крайней мере, будет иметь очевидное ошибка времени выполнения, когда есть проблема.
Является ли это лучшим подходом и существует ли готовое решение для этого? Примечание. Мне нужно генерировать и перехватывать «исключения» в чистом коде, а не в монаде ввода-вывода.