tl;dr how do I approach learning a functional language for real-world development where I can get my hands dirty quickly without much setup and can work without a heavy IDE to facilitate development? What language do you recommend?
--
Having read several older articles (https://news.ycombinator.com/item?id=2413816) and blog posts (http://japgolly.blogspot.com/2014/06/a-year-of-functional-programming.html), I've become more interested in attempting to learn - and I mean really learn - a functional language.
I'm having to learn Scala for work, but I don't really care for how much setup I have to go through to get a project going. Maybe I'm doing things the wrong way, but first-time setup of sbt (downloading all of the jars) and frameworks like Play irritate me simply because I want to get up and running quickly. Managing dependencies and working with what feels like embedded Maven syntax does not exactly excite me, mostly because I am not too familiar with Maven itself.
I'm trying to avoid losing interest, which typically comes about from uninteresting "Hello World" examples and annoying toolchain setup (usually around JVM-based languages). I have seen some really amazing work done through the JVM, but I always see developers using either a) Eclipse or b) IntelliJ as their work environment to manage all of the project-related material.
Which leads me to my last bit of background... I'm a terminal vim guy. I really enjoyed using it when I was introduced to it in academia and continued to use it ever since. Because of this, I found myself using a more terminal-oriented environment: XMonad as my window manager, rxvt as my terminal, vim plugins like Ctrlp for quick navigation between material, etc.
I've seen a lot of smart people on this site and am hoping to poke you for advice. I'd love to be able to use what I learn at work and also pass on what I learn to others.
--
My experience with functional languages is very limited. My university required one course that delved into both functional (Scheme) and logic (Prolog) languages along with context-free grammars through BNF. Because of the broad range of material, I can safely say that I did not take away much from the course (aside from an awareness of the subjects).
I'm coming from an academic computer engineering background of C and Verilog (embedded system development and software/hardware codesign) as well as an academic computer science background of Java. In my industry work, I've learned some Python, Ruby (Sinatra/Rails), and Javascript (both client-side and server-side through NodeJS).
I'm leaning towards Haskell simply because XMonad was written in it, meaning that I will finally understand my window manager's configuration script. I've also considered Erlang because of how powerful I've heard it is with concurrency (and is one of the best for the actor model).