úÎ>×;Ý      An instance  Separation r r' n s4 exists if and only if the following conditions are  met:  r )is a record scheme that contains the name n. & The last name-sort pair with the name n contains the sort s. " Removing that name-sort pair from r yields r'. XExtracts the last field of the respective name and returns the remaining record and the  extracted field.  An instance  Convertible r r' exists if and only if r and r' are record ' schemes, and records of a type r s+ can be converted into records of the type r'  s. 'Converts a record into another record. [Transformations from the definition of a record combinator for some record scheme into its 2 definition for an expanded record scheme.  An instance Record k r exists if and only if r is a record scheme whose sorts ) are of the subkind represented by k. WFolding of record schemes. This function can be used to define combinators whose types  have the form (Record rec) => t rec by induction on the rec parameter. =the definition of the combinator for the empty record scheme :turns the definition of the combinator for a record scheme r into the 5 definition for any record scheme r :& n ::: s ;the resulting combinator that works for all record schemes ,The class of name types. For each field name N', there should be a declaration of the  following form:    data N = N deriving (Show) FThat way, the name can be represented in types by the type constructor N , and in 8 expressions and patterns by the data constructor N. Furthermore, the following . instance declaration should be added:    instance Name N where     name = N ]Such instance declarations allow record combinators to construct value-level representations 2 of names from type-level representations. &The sole inhabitant of the name type. The type of record fields. 3Constructs a record field from a name and a value. Non-empty record schemes. Non-empty records. The empty record scheme. The empty record.       & !""Catenation of two record schemes. Catenation of two records. #$%OGenerates a record whose fields all contain the same value. In contrast to the  &M function from the Prelude, this function generates a finite data structure. M Thereby, the size of the generated record is determined by its type. repeat is almost a ! proper implementation of ' from the (% class. The only problem is that the  argument of repeat uses the ) type. *+,-./0XMerges a record of functions and a record of arguments by applying the functions to the % corresponding arguments. The (<<*>>) *function would be a proper implementation  of (<*>) from the ( class. DTransforms a record by applying a function to all its field values. VMerges two records by applying a function to each pair of corresponding field values. NModifies a record by changing some of its field values. The first argument of modify is _ called the modification record, and the second argument is called the data record. The X result is formed by applying each field value of the modification record to the c corresponding field value of the data record and replacing the latter by the result of the d application. Data record fields that have no corresponding field in the modification record  are left unchanged. 12345XConverts a record whose style is a constant function into the list of its field values. 6789:      !"!#$!#%&'()*+,-./0123456789records-0.0.0.0 Data.RecordData.Record.Combinators Separationseparate ConvertibleconvertExpanderRecordfoldNamename::::=:&XCatcatrepeat<<*>>mapzipWithmodifytoListToRevListThingUpdateFunsThingUpdateFunStyleZipWithAppThing RepeatThingCatThing catNilAlt catSnocAlt catExpanderbaseGHC.ListControl.Applicativepure Applicativetype-functions-0.0.0.0 Data.TypeFun Universal repeatNilAlt repeatSnocAltrepeatExpander zipWithAppzipWithAppNilAltzipWithAppSnocAltzipWithAppExpander updateFunsupdateFunsNilAltupdateFunsSnocAltupdateFunsExpanderonInit toRevListtoRevListNilAlttoRevListSnocAlttoRevListExpander