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