# Indentation Rules

This works:

``````let pb =
[
("a", stack[n (scale "phrygian" "0 [~ 3] . 8 5 4 . 4 -1 2 0") #  s "superpiano"]),
("b", stack[n (scale "phrygian" "0  . 5 8 4 . 4 -3 2 0") #  s "superpiano"])
]
in
d7 \$ ur 4 "a b a a" pb []
``````

while this does not :

``````let pb =
[
("a", stack[n (scale "phrygian" "0 [~ 3] . 8 5 4 . 4 -1 2 0") #  s "superpiano"]),
("b", stack[n (scale "phrygian" "0  . 5 8 4 . 4 -3 2 0") #  s "superpiano"])
]
in
d7 \$ ur 4 "a b a a" pb []
``````

Problem is, in my editor (VSCode), when I do a CR, it gives me the second version.
Does haskell expect 2 spaces indent instead of 4 and that might be the cause of the problem ?

You can use let to define more than one thing:

``````let a = 3
b = 4
c = 5
``````

The variable names must line up, so this is an error:

``````let a = 3
b = 4
c = 5
``````

A definition can go over one line, so this is ok:

``````let a =
3
b = 4
c = 5
``````

However the second line must be indented further than the variable that's being defined. So this is OK:

``````let a =
3
b = 4
c = 5
``````

But this isn't:

``````let a =
3
b = 4
c = 5
``````

Neither is this:

``````let a =
3
b = 4
c = 5
``````

So that's the problem with your second example - the `[` and `]` are on the same level at the thing that's being defined, and needs to be somewhere to the right of it.

Ok, thanks. I am not sure I would go to the extent to say that it makes sense but at least I know the reason now. What's the most annoying is that the IDE is not aware of that ... Does this happens in Atom too ?

This is a good point, does anyone know how to set indentation rules for common editors specifically for tidal cycles?

It might be worth checking a haskell vscode plugin, see if that does better. If so maybe the behaviour could be brought across to the tidal plugin.
The emacs tidal plugin that I often use is based on top of the haskell one and is syntax-aware and gets the indentation mostly right