Отстъпът на 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