úÎÂC¸T·      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶ None%&*+,9:;<=DQRT cConstraint that all types in a type-level list satisfy each constraint from a list of constraints.AllAllSat cs ts should be equivalent to $AllConstrained (AllSatisfied cs) ts5 if partial application of type families were legal.XConstraint that each Constraint in a type-level list is satisfied by a particular type.EConstraint that all types in a type-level list satisfy a constraint.Append for type-level lists.=A constraint-former which applies to every field in a record.<Remove the first occurence of a type from a type-level list.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 +2349;DIQRUsed this instead of ( to make a record lazy in its fields.This is identical to the Identity from Data.Functor.Identity in "base" except for its · instance.  !"#$%&'(     !"#$%&'(9 None%&*+,9:;<=DOQRT73Wrap up a value with a capability given by its type9TGiven 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.AA shorthand for @.BAn inverted shorthand for @.CA record of components  f r -> g r may be applied to a record of f to get a record of g.DA shorthand for C.E²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.F3Given a natural transformation from the product of f and g to h8, we have a natural transformation from the product of ; f and ; g to ; h|. You can also think about this operation as zipping two records with the same element types but different interpretations.GAMap each element of a record to a monoid and combine the results.H7A record with uniform fields may be turned into a list.I$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.JVBuild a record whose elements are derived solely from a constraint satisfied by each.KkBuild a record whose elements are derived solely from a list of constraint constructors satisfied by each.T<Records may be shown insofar as their points may be shown. I is used to great effect here."789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX789:;=<>?@ABCDEFGHIJK";<=XW>?@ABCD9:VUEFGH78IJKTSRQPONML789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWX=7?5A8D8None %&+,/9;DOTYA proxy for field types.`Get the data payload of an ^.a^+ is isomorphic to a functor something like Compose ElField ('(,) s).b Lens for an ElField's data payload.cShorthand for a ] with a single field.YZ[\]^_`abcdefgh YZ[\]^_`abc^_]\[h`abcYZgfedYZ[\]^_`abcdefghNone*+,9:;<=DQRTkA non-unicode equivalent of ("E).lA non-unicode equivalent of ("†).mA shorthand for p which supplies its images.nA shorthand for q which supplies its image.oA shorthand for u which supplies its index.pETwo record types are equivalent when they are subtypes of each other.qß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.rCThis is a lens into a slice of the larger record. Morally, we have: &rsubset :: Lens' (Rec f ss) (Rec f rs)sThe getter of the r lens is sE, which takes a larger record to a smaller one by forgetting fields.tThe setter of the r lens is tI, which allows a slice of a record to be replaced with different values.ucThe presence of a field in a record is witnessed by a lens into its value. The third parameter to u, i‚, is there to help the constraint solver realize that this is a decidable predicate with respect to the judgemental equality in k.vÑ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)w&For Vinyl users who are not using the lens package, we provide a getter.x&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.klmnopqrstuvwx¸yz{|klmnopqrstuvwxuvwxqrstponmlk klmnopqrstuvwx¸yz{| NoneR ;=?ABDklmno ?DAB;=onmlk NoneNone %&*DORT(This function differs from the original ¹ÿ# in that it takes an argument. In some cases, you will already have a record of the type you are interested in, and that can be passed an the argument. In other situations where this is not the case, you may need the interpretation function of the argument record to be Const () or Proxy. so the you can generate the argument with :.(This function differs from the original º . See .ˆ(This function differs from the original » . See .‰(This function differs from the original ¼ . See . }~€‚ƒ„…†‡ˆ‰ }~€‚ƒ„…†‡ˆ‰ }~€‚ƒ„…†‡ˆ‰ }~€‚ƒ„…†‡ˆ‰ None.789:;=<>?@ABCDEFGHIJKYZ[\]^_`abcklmnopqrstuvwxNone%&*+,9:;<=DOQRTaŠu'Handlers ts b', is essentially a list of functions, one for each type in ts. All functions produce a value of type ba. Hence, 'Handlers ts b' would represent something like the type-level list: [t -> b | t in ts ]‹#Newtype around functions for a to b#Helper for handling a variant of a •D: either the function is applied to the variant or the type of the •5 is refined to reflect the fact that the variant is not3 compatible with the type of the would-be handler.'Fold a field selection function over a ;.‘KA function type constructor that takes its arguments in the reverse order.” A Field of a ;  is a • .•Generalize algebraic sum types.—Apply a function to a •" value. The function must accept any variant.˜We can inject a a • into a ; where every field of the ; is ½E except for the one whose type corresponds to the type of the given • variant.™Shorthand for applying ˜ with common functors.š,Apply a natural transformation to a variant.›*This can be used to pull effects out of a •.œ1Fold a field selection function over a non-empty ;. Similar to   $: find the first field that is not ½.ž Similar to  #: find the last field that is not ½.ŸApply a type class method on a •. The first argument is a ¾ value for a list of ¿ constructors. For example, onCoRec [pr|Num,Ord|] (> 20) r-. If only one constraint is needed, use the pr1 quasiquoter. Apply a type class method on a ”. The first argument is a ¾ value for a list of ¿ constructors. For example, onCoRec [pr|Num,Ord|] (> 20) r-. If only one constraint is needed, use the pr1 quasiquoter.¡kBuild a record whose elements are derived solely from a list of constraint constructors satisfied by each.¢cGiven a proxy of type t and a 'CoRec Identity' that might be a t, try to convert the CoRec to a t.£ŒPattern match on a CoRec by specifying handlers for each case. Note that the order of the Handlers has to match the type level list (t:ts).:{Mlet testCoRec = Col (Identity False) :: CoRec Identity [Int, String, Bool] inmatch testCoRec $? (H $ \i -> "my Int is the successor of " ++ show (i - 1))' :& (H $ \s -> "my String is: " ++ s)P :& (H $ \b -> "my Bool is not: " ++ show (not b) ++ " thus it is " ++ show b) :& RNil:}'"my Bool is not: True thus it is False"¤Handle a single variant of a •D: either the function is applied to the variant or the type of the •5 is refined to reflect the fact that the variant is not2 compatible with the type of the would-be handler"Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥"•–—”‘’“«ª˜™©¨š›œžŸ ¡¢£Ž§¦¤¥‹ŒŠŠ‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«None +,<=DQR¬For the type-level list ts, ¬ f ts a3 is a curried function type from arguments of type f t for t in ts, to a result of type a..:kind! CurriedF Maybe '[Int, Bool, String] Int,CurriedF Maybe '[Int, Bool, String] Int :: *0= Maybe Int -> Maybe Bool -> Maybe [Char] -> Int­For the list of types ts, ­ ts a7 is a curried function type from arguments of types in ts to a result of type a.':kind! Curried '[Int, Bool, String] Int%Curried '[Int, Bool, String] Int :: *= Int -> Bool -> [Char] -> Int¯N-ary version of À over functorial records.Example specialized signatures: ø rcurry :: (Rec Maybe '[Int, Double] -> Bool) -> Maybe Int -> Maybe Double -> Bool rcurry :: (Rec (Either Int) '[Double, String, ()] -> Int) -> Either Int Double -> Either Int String -> Either Int () -> Int rcurry :: (Rec f '[] -> Bool) -> Bool °N-ary version of À over pure records.Example specialized signatures: Ô rcurry' :: (Rec Identity '[Int, Double] -> Bool) -> Int -> Double -> Bool rcurry' :: (Rec Identity '[Double, String, ()] -> Int) -> Double -> String -> () -> Int rcurry' :: (Rec Identity '[] -> Bool) -> Bool ±N-ary version of Á over functorial records.Example specialized signatures: Àruncurry :: (Maybe Int -> Maybe Double -> String) -> Rec Maybe '[Int, Double] -> String runcurry :: (IO FilePath -> String) -> Rec IO '[FilePath] -> String runcurry :: Int -> Rec f '[] -> Int ²N-ary version of Á over pure records.Example specialized signatures: |runcurry' :: (Int -> Double -> String) -> Rec Identity '[Int, Double] -> String runcurry' :: Int -> Rec Identity '[] -> Int Example usage: sf :: Rec Identity '[Bool, Int, Double] -> Either Int Double f = runcurry' $ b x y -> if b then Left x else Right y ³0Lift an N-ary function to work over a record of  computations.)runcurryA' (+) (Just 2 :& Just 3 :& RNil)Just 5*runcurryA' (+) (Nothing :& Just 3 :& RNil)Nothing´%Lift an N-ary function over types in g to work over a record of d Â) computations. A more general version of ³.Example specialized signatures: KruncurryA :: (g x -> g y -> a) -> Rec (Compose Maybe g) '[x, y] -> Maybe a ¬­®¯°±²³´µ¶ ¬­®¯°±²³´ ®¯°¶µ±²³´­¬ ¬­®¯°±²³´µ¶Ã !!"##$%&'()*+,-./0123456789:;<=>?@AABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abbcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™™šg››œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿¼ÀÁ¼À¼ÃļÃżÀƼÇÈÉÊ˼ÌͼÌμÀÏÐ"vinyl-0.7.0-H8oogfTSrh9IdQECC3OuU0Data.Vinyl.TypeLevelData.Vinyl.FunctorData.Vinyl.CoreData.Vinyl.DerivedData.Vinyl.LensData.Vinyl.Class.MethodData.Vinyl.CoRecData.Vinyl.CurryData.Vinyl.NotationData.Vinyl.Tutorial.Overview Data.Vinyl Data.MonoidFirstLast AllAllSat AllSatisfiedAllConstrained++RecAllRDeleteRImageRIndexNatZSConstgetConst:.Compose getComposeLiftgetLiftThunkgetThunkIdentity getIdentity$fApplicativeLift $fFunctorLift$fFunctorLift0 $fShowThunk $fMonadThunk$fApplicativeThunk$fShowIdentity$fMonadIdentity$fApplicativeIdentity$fApplicativeCompose$fTraversableCompose$fFoldableCompose$fFunctorCompose $fShowConst$fFunctorIdentity$fFoldableIdentity$fTraversableIdentity$fStorableIdentity $fEqIdentity $fOrdIdentity$fFunctorThunk$fFoldableThunk$fTraversableThunk$fStorableCompose$fFunctorConst$fFoldableConst$fTraversableConst$fStorableConstDictRecApplicativerpureRecRNil:&rappend<+>rmap<<$>><<&>>rapply<<*>> rtraverserzipWithrfoldMap recordToListreifyConstraintrpureConstrainedrpureConstraints $fStorableRec$fStorableRec0$fOrdRec $fOrdRec0$fEqRec$fEqRec0 $fMonoidRec $fMonoidRec0 $fShowRec$fRecApplicativeu:$fRecApplicativeu[]$fTestCoercion[]Rec$fTestEquality[]RecSField LazyHListHListFieldRecElFieldFieldgetFieldfieldMaprfield=:$fStorableElField $fShowSField $fOrdSField $fEqSField $fShowElField $fOrdElField $fEqElField:~:<:≅⊆∈ REquivalentRSubsetrsubsetrcastrreplaceRElemrlensrgetrput$fRSubsetk:ss:$fRSubsetk[]ss[] $fRElemar:S $fRElemar:ZrecEq recCompare recMempty recMappend recMconcatrecAdd recSubtract recMultiplyrecAbs recSignum recNegate recMinBound recMaxBoundHandlersHandlerHMatch1match1'FoldRecfoldRecOprunOpCoRec foldCoRec coRecToRec coRecToRec'coRecMap coRecTraversefoldRec1 firstField lastFieldonCoReconField reifyDictsasAmatchmatch1matchNil $fMatch1t:S $fMatch1t:Z $fFoldRecass:$fFoldReckss[] $fEqCoRec $fShowCoRecCurriedFCurried RecordCurryrcurryrcurry'runcurry runcurry' runcurryA' runcurryA$fRecordCurry:$fRecordCurry[]baseGHC.ShowShowlensGHC.BasememptymconcatGHC.EnumminBoundmaxBoundNothing Data.ProxyProxyghc-prim GHC.Types Constraint Data.Tuplecurryuncurry Applicative