Currently, we need to specify list of exceptions precisely. But the order of exceptions in the list doesn't actually matter. So the following two actions are the same, but they won't typecheck to each other:
foo :: EIO '[ E1, E2 ] Int
bar :: EIO '[ E2, E1 ] Int
Currently, we need to specify list of exceptions precisely. But the order of exceptions in the list doesn't actually matter. So the following two actions are the same, but they won't typecheck to each other:
This is usually handled by typeclasses: