Un registro puede contener muchos valores, y cada valor está asociado a un nombre.
Aquí se muestra un registro que representa al economista británico John A. Hobson:
> john =
| { first = "John"
| , last = "Hobson"
| , age = 81
| }
|
{ age = 81, first = "John", last = "Hobson" }
> john.last
"Hobson"
Hemos definido un registro con tres campos que contienen información sobre el nombre y la edad de John.
También puedes acceder a los campos del registro mediante una función de acceso a campos como esta:
> john = { first = "John", last = "Hobson", age = 81 }
{ age = 81, first = "John", last = "Hobson" }
> .last john
"Hobson"
> List.map .last [john,john,john]
["Hobson","Hobson","Hobson"]
>
A menudo es útil actualizar valores en un registro:
> john = { first = "John", last = "Hobson", age = 81 }
{ age = 81, first = "John", last = "Hobson" }
> { john | last = "Adams" }
{ age = 81, first = "John", last = "Adams" }
> { john | age = 22 }
{ age = 22, first = "John", last = "Hobson" }
Si quisieras decir estas expresiones en voz alta, dirías algo como: "Quiero una nueva versión de John cuyo apellido sea Adams" o "John cuya edad sea 22".
Ten en cuenta que al actualizar algunos campos de John, creamos un registro completamente nuevo. No sobrescribe el existente. Elm optimiza este proceso compartiendo la mayor cantidad de contenido posible. Si actualizas uno de los diez campos, el nuevo registro compartirá los nueve valores sin cambios.
Una función para actualizar las edades podría verse así:
> celebrateBirthday person =
| { person | age = person.age + 1 }
|
<function>
> john = { first = "John", last = "Hobson", age = 81 }
{ age = 81, first = "John", last = "Hobson" }
> celebrateBirthday john
{ age = 82, first = "John", last = "Hobson" }