The issue is that the vty-ui package has a dependency on an older version of vty and therefore can't use the version you have already installed. When resolving dependencies cabal wants to install older versions of some of the other packages, but is happy to use the same version of parsec. But since parsec is going to be used with some of its dependencies replaced with older versions it needs to be reinstalled too. GHC will happily let multiple versions of a package with different version numbers coexist, but can't deal with multiple copies of a package with the same version number in the same package database, so cabal needs to replace the parsec-3.1.5 install. That breaks the version of vty you have already installed.
There are several ways to deal with this:
You could use cabal sandbox init
and install packages you want into a local sandbox, leaving your normal package database intact.
You could use the --force-reinstalls flag like cabal suggests. You will probably want to specify a newer version of vty-ui while you are at it, which will presumably break even more installed packages (which is why cabal picked such an old package). Afterwards you can try to reinstall any broken packages you still need and hope there won't be a conflict.
You could go to the source repository for vty-ui and see if there is a new version compatible with your version of vty there. If not you could try making the necessary changes yourself (which might be as easy as changing some upper bounds in the .cabal file), then submit a patch/pull request.