on master help sign in
add Task.mapError and Task.mio
3892770Evan Czaplicki
builder/src/Reporting/Task.hs+17
@@ -3,8 +3,10 @@ module Reporting.Task
3 ( Task
3 ( Task
4 , run
4 , run
5 , throw
5 , throw
6+ , mapError
6 --
7 --
7 , io
8 , io
9+ , mio
8 , eio
10 , eio
9 )
11 )
10 where
12 where
@@ -31,6 +33,12 @@ throw x =
31 Task $ \_ err -> err x
33 Task $ \_ err -> err x
32
34
33
35
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+
34
42
35-- IO
43-- IO
36
44
@@ -41,6 +49,15 @@ io work =
41 Task $ \ok _ -> work >>= ok
49 Task $ \ok _ -> work >>= ok
42
50
43
51
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+
44eio :: (x -> y) -> IO (Either x a) -> Task y a
61eio :: (x -> y) -> IO (Either x a) -> Task y a
45eio func work =
62eio func work =
46 Task $ \ok err ->
63 Task $ \ok err ->