Это то, что я обычно работаю при разработке интерфейса функции без шаблона:
example = (a, b)
where
a = "Hello"
b = "World"
Обе привязки должны иметь одинаковое количество пробелов / табуляций (см. правило офсайда ). Хотя в данном случае это очевидно, в следующем он довольно скрыт, где я обозначаю пробел ·
и табуляцию »
:
example = (a, b)
··where
····a = "Hello"
» b = "World"
Это будет выглядеть как действительный код на Haskell, если редактор покажет вкладки, выровненные по коэффициентам, кратным четырем. Но это не так. Вкладки на Haskell выровнены по кратному восьми, поэтому код будет интерпретироваться следующим образом:
example = (a, b)
··where
····a = "Hello"
» b = "World"
Во-вторых, если вы используете только вкладки, вы можете получить макет, который выглядит неправильно. Например, следующий код выглядит правильно, если вкладка отображается с шестью или более пробелами (в нашем случае восемь):
example = (a, b)
» where» a = "Hello"
» » b = "World"
Но в другом редакторе, который использует 4 пробела, он больше не будет выглядеть правильно:
example = (a, b)
» where» a = "Hello"
» » b = "World"
Это все еще правильно, хотя. Тем не менее, тот, кто привык к пробелам, может переопределить b
'связывание с пробелами и закончиться ошибкой парсера.
Если вы применяете кодовое соглашение в своем коде, которое гарантирует, что вы используете только табуляции в начале строки и новую строку после where
, let
или do
, вы можете избежать некоторых проблем ( см. 11 ). Тем не менее, текущие выпуски GHC по умолчанию предупреждают о вкладках , потому что они имеют , были , источник из много ошибок синтаксического анализатора в прошлом, так что вы, вероятно, хотите избавиться и от них.