A notation that both enables complicated types to be defined and also enables values of these types to be specified.