module ProdF where import CompOps((>+<), (>=^^<)) import Fudget import SpEither(splitSP) prodF :: (F a b) -> (F c d) -> F (a, c) (Either b d) prodF :: forall a b c d. 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 forall {a} {b} {c} {d}. F a b -> F c d -> F (Either a c) (Either b d) >+< F c d rightw) forall c d e. F c d -> SP e c -> F e d >=^^< forall {a} {b}. SP (a, b) (Either a b) splitSP