В теории типов языков программирования полиморфизм строк — это разновидность полиморфизма , которая позволяет писать программы, полиморфные по типам строк, таким как типы записей и полиморфные варианты. [1] Система полиморфных типов строк и доказательство вывода типов были введены Митчеллом Вандом . [2] [3]
Определение типа записи полиморфной строки
Строково-полиморфный тип записи определяет список полей с соответствующими им типами, список отсутствующих полей и переменную, указывающую на отсутствие или наличие произвольных дополнительных полей. Оба списка являются необязательными, а переменная может быть ограничена. В частности, переменная может быть «пустой», указывая на то, что для записи не может быть дополнительных полей.
Может быть записано как . Это указывает на тип записи, который имеет поля с соответствующими типами (для ), и не имеет ни одного из полей (для ), при этом выражает тот факт, что запись может содержать другие поля, кроме .
Строково-полиморфные типы записей позволяют нам писать программы, которые работают только с разделом записи. Например, можно определить функцию, которая выполняет некоторое двумерное преобразование, которое принимает запись с двумя или более координатами и возвращает идентичный тип:
Благодаря полиморфизму строк функция может выполнять двумерное преобразование в трехмерной (фактически, n -мерной) точке, оставляя координату z (или любые другие координаты) нетронутой. В более общем смысле функция может выполняться в любой записи, содержащей поля и с типом . Потери информации не происходит: тип гарантирует, что все поля, представленные переменной, присутствуют в возвращаемом типе. Напротив, определение типа выражает тот факт, что запись этого типа имеет ровно поля и и ничего больше. В этом случае получается классический тип записи.
Операции по набору текста на записях
Операциям записи выбора поля , добавления поля и удаления поля можно присвоить строково-полиморфные типы.
^ Ванд, Митчелл (июнь 1989). «Вывод типа для конкатенации записей и множественного наследования». Труды. Четвертый ежегодный симпозиум по логике в информатике . стр. 92–97. doi :10.1109/LICS.1989.39162.
^ Wand, Mitchell (1991). «Вывод типа для конкатенации записей и множественного наследования». Информация и вычисления . 93 (Избранное из симпозиума IEEE 1989 года по логике в компьютерной науке): 1–15. doi :10.1016/0890-5401(91)90050-C. ISSN 0890-5401.