Отступ Haskell не выравнивает аргументы функции

Я использую Emacs в качестве основного редактора Haskell, и поэтому я, конечно, использую haskell-mode в качестве основного режима редактирования кода Haskell.

Теперь по какой-то причине haskell-indentation не предлагает точку отступа для аргументов функции.

Я имею в виду, что Emacs будет последовательно делать это: ( — это другая точка отступа))

myFunction = maybe arg1
□            arg2
□            arg3

Вместо этого:

myFunction = maybe arg1
□            □     arg2
□            □     arg3

Иногда мне нужно разбить функции на несколько строк из-за того, что строки становятся слишком длинными, но отсутствие haskell-mode с правильным уровнем отступа меня немного беспокоит.

Что-нибудь, что я могу сделать, чтобы облегчить это?

Редактировать

Поскольку я не единственный с этой проблемой, я открыл тикет на странице haskell-mode github [здесь]


person Electric Coffee    schedule 14.08.2015    source источник
comment
Вовсе не решение, но если вы перемещаете arg2 и arg3 на отдельные строки, вы можете сделать то же самое с arg1.   -  person duplode    schedule 14.08.2015
comment
@duplode да, но тогда они все равно будут выстроены под maybe, а не будут иметь дополнительный отступ ... И, поскольку haskell - это язык, основанный на отступах, теоретически это может вызвать некоторую неправильную интерпретацию.   -  person Electric Coffee    schedule 14.08.2015
comment
Я понимаю. FWIW, пункт 1.1 этой страницы HaskellWiki называет описанное вами поведение в режиме haskell спорно плохим выбором именно по этой причине. Лично я, вероятно, сделал бы этот фрагмент кода myFunction = maybe<newline><4 spaces>longArg1<newline><4 spaces>longArg2<newline><4 spaces>longArg3, поэтому кажется, что если бы я использовал haskell-mode, то столкнулся бы с проблемой, аналогичной вашей.   -  person duplode    schedule 14.08.2015
comment
Правила компоновки (все, что касается отступов) вступают в силу только тогда, когда появляется одно из let/do/where/of; и даже в контексте макета, если вы не уменьшаете свой отступ так, чтобы arg1 имел отступ меньше, чем maybe, вы не рискуете запутать отступ.   -  person amalloy    schedule 14.08.2015
comment
У меня те же проблемы. Обычно я временно переключаюсь в режим простого отступа, используя turn-on-haskell-simple-indent, а затем делаю отступ нужного уровня.   -  person Sibi    schedule 14.08.2015
comment
@amalloy Неправда; foo = do maybe arg1\n.........arg2 будет интерпретироваться совсем иначе, чем foo = do maybe arg1\n...............arg2, хотя ни в том, ни в другом случае отступ не уменьшается. (Первый будет foo = do { maybe arg1; arg2 }, а второй будет правильно foo = do { maybe arg1 arg2 }.   -  person Daniel Wagner    schedule 15.08.2015
comment
Я представил эту проблему как тикет на haskell-mode github, так как похоже, что я не единственный с этой проблемой.   -  person Electric Coffee    schedule 15.08.2015
comment
@ElectricCoffee Было бы неплохо, если бы вы могли связать проблему здесь. :)   -  person Sibi    schedule 15.08.2015
comment
@Sibi Отредактировал вопрос со ссылкой   -  person Electric Coffee    schedule 15.08.2015
comment
AFAICT, haskell-indent (в отличие от haskell-indentation) понимает это правильно.   -  person Stefan    schedule 07.08.2016
comment
Я голосую за то, чтобы закрыть этот вопрос как не относящийся к теме, поскольку он относится к сайту emacs.stackexchange.com.   -  person bignose    schedule 29.08.2016


Ответы (1)


Проблема haskell-indentation haskell-mode была закрыта в прошлом году и не будет исправлена.

Для желаемого поведения используйте haskell-indent.

person J_H    schedule 26.12.2017