@@ -349,7 +349,7 @@ following:
349 $ idris vbroken.idr --check
349 $ idris vbroken.idr --check
350 vbroken.idr:9:23:When elaborating right hand side of Vect.++:
350 vbroken.idr:9:23:When elaborating right hand side of Vect.++:
351 When elaborating an application of constructor Vect.:::
351 When elaborating an application of constructor Vect.:::
352− Type mismatch between
352+ Type mismatch between
353 Vect (k + k) a (Type of xs ++ xs)
353 Vect (k + k) a (Type of xs ++ xs)
355 Vect (plus k m) a (Expected type)
355 Vect (plus k m) a (Expected type)
@@ -442,7 +442,7 @@ names, ``n`` and ``a``, which are not declared explicitly. These are
442Implicit arguments, given in braces ``{}`` in the type declaration,
442Implicit arguments, given in braces ``{}`` in the type declaration,
443are not given in applications of ``index``; their values can be
443are not given in applications of ``index``; their values can be
444inferred from the types of the ``Fin n`` and ``Vect n a``
444inferred from the types of the ``Fin n`` and ``Vect n a``
445−arguments. Any name beginning with a lower case letter which appears
445+arguments. Any name beginning with a lower case letter which appears
446as a parameter or index in a
446as a parameter or index in a
447type declaration, but which is otherwise unbound, will be automatically
447type declaration, but which is otherwise unbound, will be automatically
448bound as an implicit argument. Implicit arguments can still be given
448bound as an implicit argument. Implicit arguments can still be given
@@ -1017,26 +1017,28 @@ example, we can represent a person's name and age in a record:
1018 record Person where
1018 record Person where
1019 constructor MkPerson
1019 constructor MkPerson
1020− name : String
1020+ firstName, middleName, lastName : String
1021 age : Int
1021 age : Int
1023 fred : Person
1023 fred : Person
1024− fred = MkPerson "Fred" 30
1024+ fred = MkPerson "Fred" "Joe" "Bloggs" 30
1026Records can have *parameters*, which are listed between the record
1026Records can have *parameters*, which are listed between the record
1027name and the ``where`` keyword, and *fields*, which are in an indented
1027name and the ``where`` keyword, and *fields*, which are in an indented
1028−block following the `where` keyword (here, ``name`` and ``age``). The
1028+block following the `where` keyword (here, ``firstName``, ``middleName``,
1029+``lastName``, and ``age``). You can declare multiple fields on a single
1030+line, provided that they have the same type. The constructor name is
1029−constructor name is provided after the ``constructor`` keyword. The
1031+provided after the ``constructor`` keyword. The field names can be used to
1030−field names can be used to access the field values:
1032+access the field values:
1034− *record> name fred
1036+ *record> firstName fred
1035 "Fred" : String
1037 "Fred" : String
1036 *record> age fred
1038 *record> age fred
1037 30 : Int
1039 30 : Int
1038− *record> :t name
1040+ *record> :t firstName
1039− name : Person -> String
1041+ firstName : Person -> String
1041We can also use the field names to update a record (or, more
1043We can also use the field names to update a record (or, more
1042precisely, produce a copy of the record with the given fields
1044precisely, produce a copy of the record with the given fields
@@ -1044,10 +1046,10 @@ updated):
1045.. code-block:: bash
1047.. code-block:: bash
1047− *record> record { name = "Jim" } fred
1049+ *record> record { firstName = "Jim" } fred
1048− MkPerson "Jim" 30 : Person
1050+ MkPerson "Jim" "Joe" "Bloggs" 30 : Person
1049− *record> record { name = "Jim", age = 20 } fred
1051+ *record> record { firstName = "Jim", age = 20 } fred
1050− MkPerson "Jim" 20 : Person
1052+ MkPerson "Jim" "Joe" "Bloggs" 20 : Person
1052The syntax ``record { field = val, ... }`` generates a function which
1054The syntax ``record { field = val, ... }`` generates a function which
1053updates the given fields in a record.
1055updates the given fields in a record.
@@ -1074,7 +1076,7 @@ length because it will not affect the type of the record:
1076 *record> addStudent fred (ClassInfo [] "CS")
1078 *record> addStudent fred (ClassInfo [] "CS")
1077− ClassInfo [MkPerson "Fred" 30] "CS" : Class
1079+ ClassInfo [MkPerson "Fred" "Joe" "Bloggs" 30] "CS" : Class
1079Nested record update
1081Nested record update
1080--------------------
1082--------------------