Haskell indentation
John Meacham
john@repetae.net
Tue, 26 Aug 2003 11:58:20 -0700
On Tue, Aug 26, 2003 at 02:00:32PM +0200, Per Larsson wrote:
> I have problems finding a pleasing indentation style for haskell code.
> Especially nested do-blocks have a tendency to run away to the right margin.
> When looking on source code from experienced haskell programmers, there
> seems not to be any consensus at all, everyone uses their own convention
> and in many cases one changes style in the same module.
>
> Also, the automatic tools are problematic: the emacs mode I'm using
> bails out in certain contexts and there are few user customizations available.
> The haskell-src module in the GHC library offers a parser
> and pretty-printer for haskell code with nice options for customizing
> the indentation, but it can't handle comments which is a problem if
> you want to use it as a basis for implementing a indentation tool.
>
> Is there anyone who have given this some thought and have some
> suggestions for a consistent indentation style and/or desktop tools
> which I'm not aware of?
I highly recommend the always-enter model. which means when you are
using layout you always do a linebreak after any block forming construct
(do, let, while, ...) and indent one more softtab level than the
surrounding code. this has a number of advantages:
* no need for special modes or editor support
* indents are always an integral number of softtabs.
* code doesn't run off the right side of the screen since your
indentation level is relative to the start of the line, not the
expression that started it.
* cut-n-paste of code blocks is easier.
examples of what I mean can be seen here: http://repetae.net/john/computer/haskell/
I have known several people to get turned off of haskell when trying to
recreate the indent style usually found in publications by hand...
John
--
---------------------------------------------------------------------------
John Meacham - California Institute of Technology, Alum. - john@foo.net
---------------------------------------------------------------------------