Конструктор (функциональное программирование)
В теории типов и функциональных языках программирования конструктор алгебраического типа данных или просто конструктор представляет собой функцию с пустым телом, конструирующую объект алгебраического типа данных.
Алгебраические типы данных являются важным элементом языков, типизированных по Хиндли — Милнеру.
Пример
Простейшую структуру XML-документа в Standard ML можно определить следующим образом<
datatype simple_xml = Empty
| Word of string
| Tagged of string * simple_xml list
Это определение алгебраического типа данных. Оно вводит в программу четыре идентификатора: нуль-арный конструктор типов simple_xml
и три конструктора объектов этого алгебраического типа: нуль-арный Empty
, унарный Word
и бинарный Tagged
. Последний принимает два параметра (в данном случае в виде кортежа), второй из которых имеет тип simple_xml list
(то есть список объектов определяемого здесь типа). Таким образом, simple_xml
представляет собой Шаблон:Iw.
Конструкторы обладают всеми правами функций (например, конструктор Word
имеет функциональный тип «string -> simple_xml
»), и в частности, могут использоваться в абстракции функций.
fun listOfWords s =
map Word (String.tokens Char.isSpace s)
fun toString e =
let val scat = String.concat in
case e of
Empty => ""
| Word s => s ^ " "
| Tagged (tag, contents) => scat [ "<",tag,">", scat (map toString contents), "</",tag,">" ]
end