user1002430
user1002430

Reputation:

Haskell and Vim: Proper Indentation

Search for "vim haskell indent" on SO. There are lot of answers for how to configure Vim for Haskell indentation. None of them really "work". They don't provide code as is recommended by the Haskell indentation wiki page. For example, alignment of statements in a do or let block, the = and | of a data type, etc.

Does a Vim solution exist that generates code like the wiki?

Upvotes: 22

Views: 3356

Answers (1)

shang
shang

Reputation: 24832

This might not be the answer your are looking for, but there is a way you can follow the indentation wiki guide and be compatible with most editors.

For example, do-blocks

Instead of

myFunc x = do y <- bar
              return $ x + y

You can indent it like this

myFunx x = do
    y <- bar
    return $ x + y

This is explicitly mentioned as an acceptable alternative in the indentation wiki.

In the same way, you can format data types

data FooBar
    = Foo
    | Bar
    | Asdf

Guards

myFunc x
    | x < 0     = 0
    | otherwise = x

Where-clauses

myFunc x = x + y + c where
    y = x + 5
    c = x * y

And so on...

I personally started to use this kind of style because, like you said, no editor could reliable indent the code otherwise. This works better in all editors, as the indentation is always a multiple of four (or whatever else you pick for your base indentation level). As I used this style, I also started to prefer this consistent indentation level visually, so I wouldn't go back at this point even if editors got smarter.

Upvotes: 9

Related Questions