module ProdF where import CompOps((>+<), (>=^^<)) import Fudget import SpEither(splitSP) prodF :: (F a b) -> (F c d) -> F (a, c) (Either b d) prodF :: F a b -> F c d -> F (a, c) (Either b d) prodF F a b leftw F c d rightw = (F a b leftw F a b -> F c d -> F (Either a c) (Either b d) forall a b c d. F a b -> F c d -> F (Either a c) (Either b d) >+< F c d rightw) F (Either a c) (Either b d) -> SP (a, c) (Either a c) -> F (a, c) (Either b d) forall c d e. F c d -> SP e c -> F e d >=^^< SP (a, c) (Either a c) forall a b. SP (a, b) (Either a b) splitSP