
I finally got emacs using Haskell-mode working. It seems that the latest
Sounds like it was difficult. Could you describe what you tried, what didn't work, and what did work in the end? Hopefully I can then improve the doc.
- How can I just compile and run in one go without having to type "ghc --make main.hs" as arguments for the "compile..." command and then typing "main.exe" for "shell command..."? This is what you do all the time when using Visual Studio, Eclipse, etc: just hit the F5 key which builds all the dependencies and runs one or more generated executables. Easy. Visual Haskell does this (in the cases it does not hang for some unknown reason). Of course I could dig into ELISP, but somehow I feel this must be supported somehow.
I never use GHC in this way, I always use GHCi instead. Furthermore, I tend to work on only parts of a program, so there isn't necessarily a "main" function. I'd be happy to add support for your usage pattern, but since I'm not familiar with it, I'm not sure what to add. Another problem is that unless your project is tiny, it'll have several files and currently Emacs doesn't know which file is the main one. I added very-preliminary support for Cabal in the CVS code of haskell-mode which should allow haskell-mode (at some point in the future) to figure out what's the main file an how to compile it. Currently all it does (other than font-lock the cabal file itself) is look for the Cabal file to figure out the root of the project, so that C-c C-l first does a "cd" to the root, which should allow dependencies in other directories to work more seemlessly. Patches (or precise feature requests) are very welcome. E.g. it should be fairly easy to add an "F5 binding" like you describe. The main issue is how to inform Emacs of what should be done. In VS or Eclipse, what do you have to do in order for F5 to work? Is opening some random source file enough, or do you have to select a Cabal file or what?
Use C-c C-l to load the file into GHCi. This is better than just compiling it: you get an interactive environment in which to play around with, test out functions, etc. You can still 'run' your program by typing 'main' in GHCi.
We could also add a binding which sends "main" to GHCi.
- There seems to be support for "Haskell Font Lock Symbols", which should convert \, -> and maybe other symbols to good looking Unicode fonts. I can't get the correct fonts working on Windows.
I never use Windows so I can't really help you there. Maybe ask on gnu.emacs.help how to get those chars displayed. I'm pretty sure Windows has the needed fonts, so all that's missing is some way to help Emacs make use of them. If you figure it out, please send me a note about what you had to do, so I can add it to the documentation.
Now as I understood this is not really supported because of indentation problems, as underneed the single Unicode arrow character is converted into ->?
You slightly misunderstood: this hack is fully supported. I just added some warnings to the docstring to make sure the user doesn't blame me when he gets bitten.
This is unfortunate, because that's one of the things I really like about Sun's Fortress: the usage of Unicode symbols makes the text look much more mathematically, versus the half-century-old ASCII text. Furthermore in almost all Haskell books the richer font symbols are used for clarity. Any hints on this topic?
I use this hack all the time and haven't been bitten yet. Some important aspects: - the λ should use a 1-char-wide lambda (i.e. the unicode one). There's also a JIS lambda used if the unicode one can't be found, but this one is 2-char wide, so it risks introducing mis-indentation. - the → and ← OTOH should use the 2-char-wide JIS arrow, rather than the unicode arrows for the same reasons. - ...
I wouldn't be surprised if this code had bit-rotted, or if there never has been Windows support.
I use it all the time, so it definitely hasn't bit-rotted (actually, it's one of the most often updated part of the code). There shouldn't need to be anything special for Windows, but indeed I've never tried it on Windows (and don't intend to either).
It's a corner function, used by few and therefore not that polished. By all means, try it out, and if it doesn't work, feel free to submit patches, but I doubt it'll get changed any time soon by a haskell-mode developer :)
You'd be surprised, Stefan