join is surely useful for Maybe and [].

But IO (IO a)? ReadPrec (ReadPrec a)? ST s (ST s a)? When the heck could I encounter such types?