Шаблон соответствует одинаковым значениям
Мне просто интересно, можно ли сопоставлять одни и те же значения несколько раз с помощью средств сопоставления с образцом функциональных языков программирования (Haskell / F # / Caml).
Просто подумайте о следующем примере:
plus a a = 2 * a
plus a b = a + b
Первый вариант будет вызван, когда функция вызывается с двумя одинаковыми значениями (которые будут храниться вa
).
Более полезным приложением было бы это (упрощение AST).
simplify (Add a a) = Mult 2 a
Но Хаскелл отвергает эти коды и предупреждает меня оconflicting definitions for a
- Я должен сделать явные проверки case / if вместо этого, чтобы выяснить, получила ли функция одинаковые значения. Есть ли уловка, чтобы указать, что переменная, с которой я хочу сопоставить, будет встречаться несколько раз?