mapM return = cat mapM (f >=> g) = mapM f >-> mapM g
mapMaybe (f >=> g) = mapMaybe f >-> mapMaybe g mapMaybe (pure @Maybe . f) = mapMaybe (Just . f) = map f mapMaybe (const Nothing) = drainAs a result of the second law,
mapMaybe return = mapMaybe Just = cat