Да, кстати, Влад.
В Хаскеле есть такой тип () с единственным значением (). И если мы допустим имеем параметризованный ADT, то в принципе можно записать конструктор типа со значением ():
data N1 a = List a
let x = N1 () in ...
Если в Немерле есть тоже значение (), то тебе понадобится уже ключевое слово, чтобы отделять переменные от конструкторов.
Либо N1 может быть функцией без параметров, но хотя вызов функции не может быть в паттерне (или в Немерле может?), неоднозначность возникнет при создании:
print_expr (multiply_out (Times (Value N1(), Plus (Value N2(), Value N3()))))
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Здравствуйте, Lazy Cjow Rhrr, Вы писали:
LCR>Как минимум некрасиво. Это то же самое, что требовать скобочки для любого энума или константы. Немного усложни пример, и ты сам потеряешься в скобках:
LCR>LCR>data Day = Sun | Mon | Tue | Wed | Thu | Fri | Sat
LCR>data Month = Jan | Feb | Mar | Jun | Jul | Aug | Sep| Oct | Nov | Dec
LCR>data Season = Spring | Summer | Autumn | Winter
LCR>
LCR>... и делаем деревце на основе этих типов.
Ты упускаешь из виду одну вещь. Мы ведем разговор не о Хаскеле и не об ОКамле в которых используются системы типов Хиндли-Миллера и безскобочный синтаксис. Мы говорим о языке в котором скобки и переегрузка базовые концепции. Синтаксис конструктора варианта именно такой. Так что разумно было бы ожидать что и в образцах все будет так же. Иначе появляются довольно неприятные ошибки. Человек глядя на паттерн начинает создавать экземпляры вариантов таким же образом (без скобок), а это приводит к тому, что компилятор расценивает такой код как попытку получить ссылку на конструктор. Дале система вавода типов дает сбой в месте несколько ниже от реальной проблемы и программист (не очень опытный) путается не понимая что собственно происходит.
Вторым вариантом устранения неоднозначности могло бы быть соглашение по которому переменные паттернов не имеют право совпадать с именами типов. Это так же подняло бы дуракоустойчивость.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Здравствуйте, Lazy Cjow Rhrr, Вы писали:
LCR>В Хаскеле есть такой тип () с единственным значением ().
То в Хаскеле. В Немерле таких неоднозначностей нет, так как вызов функции или конструктора всегда записывается со скобками. Скобки можно использовать как указание пустой операции, но к конфликту это не приводит.
В общем, в Немерле проблемы легко разрешимы. Так что это скорее дань традициям языков где такие проблемы были.
... << RSDN@Home 1.2.0 alpha rev. 637>>
VladD2,
VD>Синтаксис конструктора варианта именно такой. Так что разумно было бы ожидать что и в образцах все будет так же.
А ну это другое дело.
VD>Вторым вариантом устранения неоднозначности могло бы быть соглашение по которому переменные паттернов не имеют право совпадать с именами типов. Это так же подняло бы дуракоустойчивость.
Да, согласен.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>