idLowSP :: SP a b -> SP (Message c a) (Message c b) idHighSP :: SP a b -> SP (Message a c) (Message b c) idLeftSP :: SP a b -> SP (Either c a) (Either c b) idRightSP :: SP a b -> SP (Either a c) (Either b c)
idRightSP sp = sp `compEitherSP` idSP idLeftSP sp = idSP `compEitherSP` sp ...