import public Control.Relation
import public Control.Categoryinterface APIFunctor : Rel API -> (API -> API) -> Typemap : mor a b -> mor (f a) (f b)APIFunctor (=&>) MaybeAPIFunctor (=&>) Maybemap : APIFunctor mor f => mor a b -> mor (f a) (f b)interface APIBifunctor : Rel API -> (API -> API -> API) -> Typebimap : mor a b -> mor x y -> mor (f a x) (f b y)bimap : APIBifunctor mor f => mor a b -> mor x y -> mor (f a x) (f b y)mapFst : APIBifunctor mor bi => mor a b -> mor (bi a c) (bi b c)mapSnd : APIBifunctor mor bi => mor a b -> mor (bi c a) (bi c b)interface APIMonoid : Rel API -> (API -> API -> API) -> Typeempty : APIMonoid mor bi => APIidLeft : {auto __con : APIMonoid mor bi} -> mor (bi empty a) aidRight : {auto __con : APIMonoid mor bi} -> mor (bi a empty) aassoc1 : APIMonoid mor bi => mor (bi a (bi b c)) (bi (bi a b) c)assoc2 : APIMonoid mor bi => mor (bi (bi a b) c) (bi a (bi b c))interface Cartesian : Rel API -> (API -> API -> API) -> Typefst : Cartesian mor bi => mor (bi a b) asnd : Cartesian mor bi => mor (bi a b) b(&&&) : Cartesian mor bi => mor c a -> mor c b -> mor c (bi a b)swap : Cartesian mor bi => mor (bi x y) (bi y x)duplicate : Cartesian mor bi => mor a (bi a a)assocCart1 : Cartesian mor bi => mor (bi a (bi b c)) (bi (bi a b) c)assocCart2 : Cartesian mor bi => mor (bi (bi a b) c) (bi a (bi b c))interface APIAlternative : Rel API -> (API -> API -> API) -> (API -> API) -> Typeerr : mor Forever (f a)firstSuccess : mor (bi (f a) (f a)) (f a)APIAlternative (=&>) (*) Maybeerr : APIAlternative mor bi f => mor Forever (f a)firstSuccess : APIAlternative mor bi f => mor (bi (f a) (f a)) (f a)or : APIAlternative mor bi f => mor a (f b) -> mor a (f b) -> mor a (f b)tryAll : APIAlternative mor bi f => List1 (mor a (f b)) -> mor a (f b)interface APIPointed : (API -> API -> Type) -> (API -> API) -> Typepure : mor a (f a)APIPointed (=&>) MaybeAPIPointed (=&>) Maybepure : APIPointed mor f => mor a (f a)interface APIMonad : (API -> API -> Type) -> (API -> API) -> Typejoin : mor (f (f a)) (f a)join : APIMonad mor f => mor (f (f a)) (f a)interface APICopointed : (API -> API -> Type) -> (API -> API) -> Typeextract : mor (f a) aextract : APICopointed mor f => mor (f a) ainterface APIComonad : (API -> API -> Type) -> (API -> API) -> Typedup : mor (f a) (f (f a))dup : APIComonad mor f => mor (f a) (f (f a))returnFirst : APIAlternative mor bi f => mor a (f b) -> mor a (f b) -> mor a (f b)(>=>) : APIMonad mor f => mor a (f b) -> mor b (f c) -> mor a (f c)Kleisli composition
(<=<) : APIComonad mor f => mor (f a) b -> mor (f b) c -> mor (f a) cCokleisli composition, NOT right-to-left kleisli composition
APIKleisli : (API -> API) -> Rel API -> Rel APIAPIKleisliInstance : APIMonad mor f => Category (APIKleisli f mor)