úÎ/C+E0      !"#$%&'()*+,-./  Safe-Inferred'(~>)'! is a morphism between functors. 1If a record is homogenous, you can fold over it. 8To accumulate effects distributed over a data type, you  it. 8This class is a generalized, but non-pointed version of 0. This A is useful for types which range over functors rather than sets.    Safe-Inferred .Validators transform identities into results. A type which is similar to 1, except that it has a * slightly different Applicative instance. 2The 0 instance to   relies on its error type  being a 3&. That way, it can accumulate errors.  24    24None #A field contains a key and a type.  5   5None Append for type-level lists. #Fields of plain records are in the 6 functor. <A record is parameterized by a list of fields and a functor ( to be applied to each of those fields. $Fixes a polymorphic record into the 6 functor. Append for records. ;Shorthand for a record with a single field. Lifts the field's . value into the chosen functor automatically. 7,Accumulates a homogenous record into a list 8 We provide a 9 instance for 6. :FRecords may be distributed to accumulate the effects of their fields. ;&Records can be applied to each other. 7<=8>?:;@ABCDE7<=8>?:;@ABCDENone<A constraint for implicit resolution of list subset proofs. #An inductive list subset relation. @A constraint for implicit resolution of list membership proofs. *An inductive list membership proposition.  FGHI     FGHINone!Project a field from a . "Project a field from a . #Set a field in a  over an arbitrary functor. $Set a field in a . %Modify a field. &@Provide a lens to a record field. Note that this implementation = does not support polymorphic update. In the parlance of the lens  package, C rLens' :: IElem (sy:::t) rs => (sy:::t) -> Lens' (Rec rs f) (f t) 'A lens into a ) that smoothly interoperates with lenses  from the lens. package. Note that polymorphic update is not # supported. In the parlance of the lens package, A rLens :: IElem (sy:::t) rs => (sy:::t) -> Lens' (PlainRec rs) t !"#$%&'!"#$%&'!"#$%&'!"#$%&'None(FIf two records types are subtypes of each other, that means that they ! differ only in order of fields. JEOne record is a subtype of another if the fields of the latter are a % subset of the fields of the former. )A subtyping relation. +Term-level record congruence. (J)*+KLM()*+)*(+(J)*+KLMNone,-./,-./.-,/,-./ None(  !"#$%&'()*+N     !"#$%&'()*+,-./01234567869:;9<=>9?@ABCDEFG9HIJKLMNOPQRSTUVWXYZ[\]^ vinyl-0.2Data.Vinyl.ClassesData.Vinyl.ValidationData.Vinyl.FieldData.Vinyl.RecData.Vinyl.WitnessesData.Vinyl.LensData.Vinyl.RelationData.Vinyl.Unicode Data.Vinyl~>NTrunNTFoldRecfoldRecDistdistApply<<*>> ValidatorResultSuccessFailure:::Field++PlainRecRec:&RNil fixRecord<+>=:ISubsetSubset SubsetCons SubsetNilIElemElemThereHereImplicit implicitlyrGet'rGetrPut'rPutrModrLens'rLens:~:<:cast~=≅⊆∈baseControl.Applicative Applicative Data.EitherEither$fApplicativeResult Data.MonoidMonoid$fFunctorResult $fShow:::transformers-0.3.0.0Data.Functor.IdentityIdentity recToList$fShowIdentityGHC.ShowShow $fDistRec$fApply(->)~>Rec $fStorableRec$fStorableRec0 $fFoldRecRecg $fFoldRecReca $fMonoidRec $fMonoidRec0$fEqRec$fEqRec0 $fShowRec $fShowRec0$fImplicitSubset$fImplicitSubset0$fImplicitElem$fImplicitElem0 IsSubtype lookupField $f<:RecRec $f<:RecRec0