Я использую скобки в Haskell, которые в основном необязательны: они необходимы для переопределения обычной привязки / приоритета; в противном случае свободно добавляйте / опускайте их, чтобы улучшить читаемость. Затем рассмотрите их (в GH C 8.6.5.):
f (Just x) = x -- needed around `(Just x)` because `f Just x` would bind differently
(Just y) = Just () -- pattern based binding for var `y`
Just y2 = Just () -- but optional around `(Just y)`
Just (y3) = Just () -- optional around bare variables
x = ()
(x2) = ()
Не пытаясь это сделать сначала, ожидаете ли вы, что парнины будут необязательными для LHS функционального уравнения здесь:
(f (Just x)) = x
Это отклонено: Parse error in pattern: f
. «в шаблоне» предполагает, что синтаксический анализатор ожидает (
для запуска шаблона, тогда почему шаблон Just y2 = ...
не отклонен из-за отсутствия паренов?
С
* происходит что-то непоследовательное / немного страннее 1013 *
Существует ли какой-либо шаблон логики / логики для парней с этими примерами?
Я спрашиваю, потому что я всегда пишу шаблоны в паренах (Just y) = ...
; Я был удивлен, что парены являются необязательными, потому что Just y2 = ...
может легко быть опечаткой для функции decl just y2 = ...
.
Addit: Ах да, паренсы требуются вокруг префикса, используемого оператором. Эти работы:
pattern (::~~) x y = (x, y) -- OK
pattern x ::~ y = (x, y) -- OK
(::~~) True y4 = (True, ()) -- OK
(True ::~~ y5) = (True, ()) -- OK
True ::~~ y6 = (True, ()) -- OK
Это не
-- pattern (x ::~~ y) = (x, y) -- parse error on input `x'