Циклоп со сжатыми губами
Отображает стек во стек.
Он получился как побочный
Эффект от добавления
Конструкции для типов верхних
Значений уточнения.
Циклоп со сжатыми губами —
Тождественная функция.
() : ||(А теперь контекст, нужный для понимания)
В конкатенативных языках программирования (типа форта) функции можно понимать принимающими и возвращающими по стеку. Добавить типирование можно, ограничивая типы какой-то верхней части стека. В языках, близких форту, часто используются комментарии вида
(... a b c -- ... d e f) (скобки ограничивают любой комментарий, минусы семантические), обозначающие, что до выполнения функции в стеке будут сверху вниз штуки, обозначаемые
c,
b,
a etc., и после будут
f,
e,
d etc.. Я вечно забываю, где там верх стека — справа или слева, и потому для своих нужд обозначаю это
, где
обозначает верх стека, а разделитель между старым и новым опущен по ненадобности.
Если перейти к типам, подобно можно обозначать тип функции, которая требует наверху стека того-то и потом гарантирует там другое то-то. Если система типов достаточно мощна, чтобы допускать полиморфные функции, может понадобиться уточнять типы её аргументов или результатов. Для этого можно пожертвовать скобки
() или, скажем,
{} (остальные ASCII-скобки были бы полезны для других вещей), перечисляя в них типы верхушки стека. Ничего плохого не случится, если допускать пустой список типов. Такие уточнения естественно рассматривать как обычные ничего не делающие функции с соответствующими типами:
— в таком случае никаких дополнительных правил в систему вывода типов добавлять не понадобится (насколько я представляю то, что можно вообще в таком языке с ней сделать). Итак,
.