0 | module IO.Async.Outcome
2 | import public Data.List.Quantifiers.Extra
13 | 0 Result : List Type -> Type -> Type
14 | Result es a = Either (HSum es) a
17 | data Outcome : List Type -> Type -> Type where
18 | Succeeded : (res : a) -> Outcome es a
19 | Error : (err : HSum es) -> Outcome es a
20 | Canceled : Outcome es a
23 | toOutcome : Result es a -> Outcome es a
24 | toOutcome (Right v) = Succeeded v
25 | toOutcome (Left errs) = Error errs
28 | Functor (Outcome es) where
29 | map f (Succeeded v) = Succeeded (f v)
30 | map _ (Error v) = Error v
31 | map _ Canceled = Canceled
34 | Foldable (Outcome es) where
35 | foldr f x (Succeeded v) = f v x
38 | foldl f x (Succeeded v) = f x v
41 | foldMap f (Succeeded v) = f v
42 | foldMap f _ = neutral
44 | toList (Succeeded v) = [v]
47 | null (Succeeded v) = False
51 | Traversable (Outcome es) where
52 | traverse f (Succeeded v) = Succeeded <$> f v
53 | traverse _ (Error v) = pure $
Error v
54 | traverse _ Canceled = pure Canceled