7 | data Either0 : Type -> Type -> Type where
8 | Left0 : (0 v : a) -> Either0 a b
9 | Right0 : (0 v : b) -> Either0 a b
13 | bimap : (0 f : a -> c) -> (0 g : b -> d) -> Either0 a b -> Either0 c d
14 | bimap f g (Left0 v) = Left0 $
f v
15 | bimap f g (Right0 v) = Right0 $
g v
18 | public export %inline
19 | map : (0 f : b -> d) -> Either0 a b -> Either0 a d
22 | public export %inline
23 | 0 either0 : (f : a -> e) -> (g : b -> e) -> Either0 a b -> e
24 | either0 f g (Left0 v) = f v
25 | either0 f g (Right0 v) = g v
28 | data IsLeft0 : Either0 a b -> Type where
29 | ItIsLeft0 : IsLeft0 (Left0 v)
32 | 0 fromLeft0 : (e : Either0 a b) -> {auto prf : IsLeft0 e} -> a
33 | fromLeft0 (Left0 v) = v
36 | data IsRight0 : Either0 a b -> Type where
37 | ItIsRight0 : IsRight0 (Right0 v)
40 | 0 fromRight0 : (e : Either0 a b) -> {auto prf : IsRight0 e} -> b
41 | fromRight0 (Right0 v) = v
44 | (<|>) : Either0 a b -> Lazy (Either0 a b) -> Either0 a b
45 | (<|>) (Right0 v) _ = Right0 v
46 | (<|>) (Left0 _) e = e