data Message a b = Low a | High b instance (Eq a, Eq b) => Eq (Message a b) instance (Ord a, Ord b) => Ord (Message a b) instance (Show a, Show b) => Show (Message a b) isHigh :: Message a b -> Bool isLow :: Message a b -> Bool stripHigh :: Message a b -> Maybe b stripLow :: Message a b -> Maybe a mapMessage :: (a -> b) -> (c -> d) -> Message a c -> Message b d aLow :: (a -> b) -> Message a c -> Message b c aHigh :: (a -> b) -> Message c a -> Message c b pushMsg :: (Functor b) => Message (b a) (b c) -> b (Message a c)
type Maybe = ??