idLowSP :: SP a1 b -> SP (Message a2 a1) (Message a2 b) idHighSP :: SP a1 a2 -> SP (Message a1 b) (Message a2 b) idLeftSP :: SP a1 b -> SP (a2 ⊕ a1) (a2 ⊕ b) idRightSP :: SP a1 a2 -> SP (a1 ⊕ b) (a2 ⊕ b)
idRightSP sp = sp `compEitherSP` idSP idLeftSP sp = idSP `compEitherSP` sp ...