Necessary, but not sufficient. A lot of terminal apps are still - to borrow a phrase - captive user interfaces, which don't play much better with others than a GUI. Decompose all the things into individual utilities (or libraries) so they can be reused and recombined!
I built a shell in Haskell for a class project this semester. At some point I'll get around to releasing it on Github. It doesn't do much aside from backgrounding tasks, piping, and supporting environment variables (both in a config file and dynamically through a built in export command). But it was fun to build!
I would totally use something that allowed me to use Haskell like I use bash. Turtle allows me to do some of it. I'm thinking more along the lines of this project that never took off though: