Hacker News new | past | comments | ask | show | jobs | submit login

Nice writeup!

I've always wondered why functional programming-people seem to prefer emacs over vim? I guess it could be the choice for people wanting more IDE-like features, and aren't afraid of a little bloat(cause surely it can't just be the lisp in the configs), am I right?

Disclaimer: I'm a Haskeller who prefers Vim.

I think the reason for Emacs dominance is mostly historical: early on it was probably due to good capability for integrating a REPL process. Also since it is written in a lisp and can be grown organically to fit almost any purpose it developed an ecosystem of useful tools more quickly than Vim - attracting more developers who further developed tooling.

Today the only feature you can't get in Vim that Emacs has is structured haskell mode. I haven't used that enough to know if its worth the switch...

I DID try to switch and while none of this is a real show-stopper and it all could be fixed - I spent a dozen hours on trying to get an Emacs setup with all the features I have in Vim and simply couldn't. For example the auto-complete plugins do not list the type signatures in the pop-up window like neco-ghc does and there is nothing that comes close to fugitive. Also Emacs has an hdevtools plugin for flycheck but I doubt its used much because it doesn't even have a way to pass command line arguments so I had to go hack that in myself. Hdevtools is a killer feature, having instant compilation feedback is incredibly useful in Haskell...it makes it so easy to use the type system interactively while designing a new module. I did get hdevtools to work eventually but I would have to learn emacs lisp to get it working right and since there are other gaps I never put in the effort. I could never figure out how to launch a ghci process with custom arguments...I want the damn REPL to be launched with cabal repl so that it has the same environment as my code and ... I'm sure its easy if you know what you are doing, but I spent at least a couple of hours on that alone and failed. I spent probably 3-4 hours getting Evil working the way I want, things like imap keybinds required a lot of research for some reason. I did get it to work though...Emacs without Evil is not even a contender in mind - modal editing is just way to powerful and my left pinky will be out the goddamn door if I make it pound chords all day.

Switching is hard, especially if you're coming from Vim and don't have any pre-existing familiarity with Lisp. I know nothing about Haskell and barely more than that about Vim, but I do know quite a fair bit about Emacs and Lisp, and I would be interested in an opportunity to work with someone who's trying to switch; between someone who knows what Haskell and its associated ecosystem should be doing, and me who knows how to make Emacs do what's necessary for said ecosystem to behave itself properly, I expect we could end up with a pretty smooth process for Haskellers interested in making the jump to Emacs.

(Oh, and parenthetically, I would mention that rebinding your Caps Lock key to an additional Control key helps a lot with the pinky situation. Sure, you still work that finger harder than you do with a modal editor, but you no longer have to cramp your hand to do so, and after a little while getting used to it -- I advise disabling the "real" Control key, or rebinding it to do nothing but emit a nasty noise -- you no longer think about it at all.)

> and there is nothing that comes close to fugitive.

I have never used fugitive, but I can't imagine being unhappy with Magit? What makes fugitive so much better?

I am a vim-er and I decided that I will stick to one editor and that will be vim. I don't want to spent more time on learning one more editor. Emacs may be great but I made my choice and I want to stick to it.

For some time I wanted dive into haskell, and could not afford time, but recently I am getting some time freed up.

Can you suggest, how to set up vim for haskell like any plugins or scripts for better development experience.

As a side not this video(https://www.youtube.com/watch?v=ScS8Q32lMxA) of live haskell coding in vim looks interesting.

I highly recommend haskell-vim-now [1]. The author has a nice demo showcasing this setup, along with his virtual pair-coding environment [2].

With one install command, you get a polished Vim/Haskell setup with tab completion, type inspection, Hoogle, hinting, unicode symbols, etc.

Also has a nice dark theme. In fact, I use it as my go-to Vim configuration on new systems, even outside of Haskell.

It also lets you pipe code to the Haskell REPL for live evaluation (via tmux).

[1] https://github.com/begriffs/haskell-vim-now [2] https://www.youtube.com/watch?v=7sr8cAIwdBs

EDIT: Add video

That installation script is horrifying! I'm sure it has saved some people a lot of time, but it's a terrible idea to point anyone to it who already has an existing vim config.

For me (used to use vim and moved to emacs) it was the ability to have a full programming language behind me which made me feel like I could truly customise every feature of the editor I wanted. Incidentally, if you do want to switch you don't have to give up your vim keybindings, there is evil-mode[0] which gives you all the bindings you're used to

[0] https://gitorious.org/evil/pages/Home

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact