Справді важке питання. Сподіваюся, ваші відповіді виявлять щось хороше. Тим часом, ось каталог помилок чи інших прикрих речей, які я знайшов у коді для початківців. Існує деяке накладання на сторінку стилю Cal Tech, на яку вказує Корнель Кіселевич. Деякі мої поради настільки ж невизначені та марні, як "коштовні камені" HaskellWiki, але я сподіваюся, що принаймні це краща порада :-)
Відформатуйте свій код, щоб він містив 80 стовпців. (Досвідчені користувачі можуть віддати перевагу 87 або 88; крім того, що це вимагає).
Не забувайте , що letпалітурки і whereположення створюють взаємно рекурсивне гніздо визначень, НЕ послідовність визначень.
Скористайтеся перевагами where, особливо їх здатністю бачити параметри функцій, які вже входять до сфери застосування (приємна невизначена порада). Якщо ви справді маркуєте Haskell, ваш код повинен мати набагато більше whereприв'язок, ніж letприв'язок. Занадто багато letприв'язок - ознака нереконструйованого програміста ML або програміста Lisp.
Уникайте зайвих дужок. Деякі місця, де зайві дужки особливо образливі, є
Навколо умови у ifвиразі (клеймить вас як нереконструйованого програміста на С)
Навколо функціональної програми, яка сама є аргументом інфіксного оператора ( функціональна програма зв'язується сильніше, ніж будь-який інфіксний оператор . Цей факт повинен бути вписаний у мозок кожного Хаскеллера, приблизно так само, як і у нас, динозаврів, правило сканування справа наліво APL спалений.)
Розташуйте пробіли навколо інфіксних операторів. Поставте пробіл після кожної коми у літералі кортежу.
Віддайте перевагу пробілу між функцією та її аргументом, навіть якщо аргумент має дужки.
Використовуйте $оператор розумно, щоб скоротити дужки. Пам’ятайте про тісний взаємозв’язок між $infix і .:
f $ g $ h x == (f . g . h) x == f . g . h $ x
Не забувайте про вбудовані Maybeта Eitherтипи.
Ніколи не пишіть if <expression> then True else False; правильна фраза - просто <expression>.
Не використовуйте headабо tailколи ви могли б використовувати відповідність шаблону.
Не забувайте про склад функції за допомогою оператора інфіксних крапок.
Обережно використовуйте розриви рядків. Розриви рядків можуть підвищити читабельність, але є компроміс: Ваш редактор може відображати лише 40–50 рядків одночасно. Якщо вам потрібно прочитати і зрозуміти велику функцію відразу, не можна надмірно використовувати розриви рядків.
Майже завжди віддають перевагу --коментарям, які переходять до кінця рядка, перед {- ... -}коментарями. Коментарі в дужках можуть бути доречними для великих заголовків - і все.
Дайте кожній функції верхнього рівня явний підпис типу.
По можливості вирівняйте --рядки, =знаки і навіть дужки та коми, які трапляються в сусідніх рядках.
Під впливом, як я переживаю центральний GHC, я дуже м'яко віддаю перевагу використанню camelCaseдля експортованих ідентифікаторів та short_nameз підкресленнями для локальних whereзмінних чи letзмінних.