@@ -3,8 +3,10 @@ module Reporting.Task
33 ( Task
44 , run
55 , throw
6+ , mapError
67 --
78 , io
9+ , mio
810 , eio
911 )
1012 where
@@ -31,6 +33,12 @@ throw x =
3133 Task $ \_ err -> err x
3234
3335
36+mapError :: (x -> y) -> Task x a -> Task y a
37+mapError func (Task task) =
38+ Task $ \ok err ->
39+ task ok (err . func)
40+
41+
3442
3543-- IO
3644
@@ -41,6 +49,15 @@ io work =
4149 Task $ \ok _ -> work >>= ok
4250
4351
52+mio :: x -> IO (Maybe a) -> Task x a
53+mio x work =
54+ Task $ \ok err ->
55+ do result <- work
56+ case result of
57+ Just a -> ok a
58+ Nothing -> err x
59+
60+
4461eio :: (x -> y) -> IO (Either x a) -> Task y a
4562eio func work =
4663 Task $ \ok err ->