úÎI+DÅQ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPNone!"&'(2346=JKMAppend for type-level lists.=A constraint-former which applies to every field in a record.HA partial relation that gives the indices of a sublist in a larger list.=A partial relation that gives the index of a value in a list.KA mere approximation of the natural numbers. And their image as lifted by  -XDataKinds+ corresponds to the actual natural numbers.None '-./24=BJK  !"#   #"!    !"#None!"&'(2346=HJKM$3Wrap up a value with a capability given by its type&TGiven a section of some functor, records in that functor of any size are inhabited.((A record is parameterized by a universe u, an interpretation f and a list of rows rsM. The labels or indices of the record are given by inhabitants of the kind u"; the type of values at any label r :: u! is given by its interpretation f r :: *.+#Two records may be pasted together.,A shorthand for +.-( _ rs with labels in kind u gives rise to a functor Hask^u -> HaskI; that is, a natural transformation between two interpretation functors f,g' may be used to transport a value from ( f rs to ( g rs..A shorthand for -./An inverted shorthand for -.0A record of components  f r -> g r may be applied to a record of f to get a record of g.1A shorthand for 0.2²A record may be traversed with respect to its interpretation functor. This can be used to yank (some or all) effects from the fields of the record to the outside of the record.37A record with uniform fields may be turned into a list.4$Sometimes we may know something for all8 fields of a record, but when you expect to be able to each8 of the fields, you are then out of luck. Surely given  "x:u.Æ(x) we should be able to recover  x:u "¢ Æ(x) ! Sadly, the constraint solver is not quite smart enough to realize this and we must make it patently obvious by reifying the constraint pointwise with proof.;<Records may be shown insofar as their points may be shown. 4 is used to great effect here.$%&'()*+,-./0123456789:;<=$%&'()*+,-./01234(*)+,-./01&'=<23$%4;:98765$%&'(*)+,-./0123456789:;<=) ,.1None!"'(=HM>?@AB>?@ABAB@?>>?@ABNone&'(2346=JKMCA non-unicode equivalent of ("E).DA non-unicode equivalent of ("†).EA shorthand for H which supplies its images.FA shorthand for I which supplies its image.GA shorthand for M which supplies its index.HETwo record types are equivalent when they are subtypes of each other.IßIf one field set is a subset another, then a lens of from the latter's record to the former's is evident. That is, we can either cast a larger record to a smaller one, or we may replace the values in a slice of a record.JCThis is a lens into a slice of the larger record. Morally, we have: &rsubset :: Lens' (Rec f ss) (Rec f rs)KThe getter of the J lens is KE, which takes a larger record to a smaller one by forgetting fields.LThe setter of the J lens is LI, which allows a slice of a record to be replaced with different values.McThe presence of a field in a record is witnessed by a lens into its value. The third parameter to M, i‚, is there to help the constraint solver realize that this is a decidable predicate with respect to the judgemental equality in k.NÑWe can get a lens for getting and setting the value of a field which is in a record. As a convenience, we take a proxy argument to fix the particular field being viewed. These lenses are compatible with the lens library. Morally: )rlens :: sing r => Lens' (Rec f rs) (f r)O&For Vinyl users who are not using the lens package, we provide a getter.P&For Vinyl users who are not using the lens• package, we also provide a setter. In general, it will be unambiguous what field is being written to, and so we do not take a proxy argument here.CDEFGHIJKLMNOPQRSTUCDEFGHIJKLMNOPMNOPIJKLHGFEDC CDEFGHIJKLMNOPQRSTUNoneK (),./1CDEFG ,1./()GFEDCNone$$%&'()*+,-./01234>?@ABCDEFGHIJKLMNOPV      !"#$%&''()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX vinyl-0.5Data.Vinyl.TypeLevelData.Vinyl.FunctorData.Vinyl.CoreData.Vinyl.DerivedData.Vinyl.LensData.Vinyl.Notation Data.Vinyl++RecAllRImageRIndexNatSZConstgetConst:.Compose getComposeLiftgetLiftThunkgetThunkIdentity getIdentity$fApplicativeLift $fFunctorLift$fFunctorLift0 $fShowThunk $fMonadThunk$fApplicativeThunk$fShowIdentity$fMonadIdentity$fApplicativeIdentity$fApplicativeCompose$fTraversableCompose$fFoldableCompose$fFunctorComposeDictRecApplicativerpureRec:&RNilrappend<+>rmap<<$>><<&>>rapply<<*>> rtraverse recordToListreifyConstraint $fStorableRec$fStorableRec0$fEqRec$fEqRec0 $fMonoidRec $fMonoidRec0 $fShowRec$fRecApplicativek:$fRecApplicativek[] LazyHListHListFieldRecElFieldField:~:<:≅⊆∈ REquivalentRSubsetrsubsetrcastrreplaceRElemrlensrgetrputlens$fRSubsetk:ss:$fRSubsetk[]ss[] $fRElemkr:S $fRElemkr:Z