>>> either (*2) (*3) (sLeft (3 :: SInteger)) 6 :: SInteger >>> either (*2) (*3) (sRight (3 :: SInteger)) 9 :: SInteger >>> let f = uninterpret "f" :: SInteger -> SInteger >>> let g = uninterpret "g" :: SInteger -> SInteger >>> prove $ \x -> either f g (sLeft x) .== f x Q.E.D. >>> prove $ \x -> either f g (sRight x) .== g x Q.E.D.
>>> liftEither (Left 3 :: Either SInteger SBool) Left 3 :: SEither Integer Bool >>> liftEither (Right sTrue :: Either SInteger SBool) Right True :: SEither Integer Bool