>>59
[1] flip(>>=) f . return == f
[2] flip(>>=) return . f == f
[3] flip(>>=) g . flip(>>=) f == flip(>>=) (flip(>>=) g . f)
この定義から分かることは
f と g と return には flip(>>=) を適用できること
flip(>>=) f の戻り値の型は f の戻り値の型と同じ (引数の型だけ変わる) ということ

つまり、戻り値の型は変えられないが引数の型は変えられるようなものを表現したいんだと思う