úηŌŪĊ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰None%&'+,-.;<=>?EFNOQSTVbdh?h/)A lower fixity operator for type equalityŠThere doesn't seem to be a ( =.?) :: Symbol -H Symbol -> Bool, so here it is in terms of other ghc-7.8 type functions‹KReturns the left list with all of the elements from the right list removed.Œ"Type level Row modification helperfZips two rows together to create a Row of the pairs. The two rows must have the same set of labels.%Map a type level function over a Row. A type synonym for disjointness.(Is the first row a subset of the second?)Are all of the labels in this Row unique?4A convenient way to provide common, easy constraintsThe labels in a Row. !A null constraint of one argumentA null constraint ĸ Any structure over two rows in which every element of both rows satisfies the given constraint can be metamorphized into another structure over both of the rows. TODO: Perhaps it should be over two constraints? But this hasn't seemed necessary in practice. RA metamorphism is a fold followed by an unfold. Here, we fold both of the inputs.ŽAn internal type used by the  in +. A class to capture the idea of 3 so that it can be partially applied in a context.{This data type is used to for its ability to existentially bind a type variable. Particularly, it says that for the type a, there exists a t& such that 'a ~ f t' and 'c t' holds.ŠAny structure over a row in which every element is similarly constrained can be metamorphized into another structure over the same row.dA metamorphism is an unfold followed by a fold. This one is for product-like row-types (e.g. Rec).`A metamorphism is an unfold followed by a fold. This one is for sum-like row-types (e.g. Var).ĪProof that the given label is a valid candidate for the next step in a metamorph fold, i.e. it's not in the list yet and, when sorted, will be placed at the head.+A type level way to create a singleton Row. Alias for  (r .! l) "H aK. It is a class rather than an alias, so that it can be partially applied. Alias for K. It is a class rather than an alias, so that it can be partially applied.!The minimum join of the two rows.%Type level Row difference. That is, l .\\ r? is the row remaining after removing any matching elements of r from l.Type level Row appendType level Row element removalType level label fetchingType level row renamingType level Row modificationType level Row extension>Does the row lack (i.e. it does not have) the specified label? 1Elements stored in a Row type are usually hidden."Type level version of empty#A label%OThe kind of elements of rows. Each element is a label and its associated type.'The kind of rows. This type is only used as a datakind. A row is a typelevel entity telling us which symbols are associated with which types.(ĖA row is a list of symbol-to-type pairs that should always be sorted lexically by the symbol. The constructor is exported here (because this is an internal module) but should not be exported elsewhere.)$A helper function for showing labels*0A helper function to turn a Label directly into .+FThis allows us to derive a `Forall (Map f r) ..` from a `Forall r ..`.,#Map preserves uniqueness of labels.- Allow any  over a row-type, be usable for  ..*Return a list of the labels in a row type./DReturn a list of the labels in a row type and is specialized to the   constraint.&The way to transform the empty element The unfoldThe foldThe input structure&The way to transform the empty element The unfoldThe foldThe input structure0  !"#$%&'()*+,-./0'(#$%&" !./ )*+-,   ސ‘   !#$%&'(4766654None%&'+,-.;<=>?EFNOQSTVbdhwþ(’GRZipPair is used internally as a type level lambda for zipping records.“HRMap is used internally as a type level lambda for defining record maps.;A record with row r.<?A pattern version of record union, for use in pattern matching.=‘A pattern for the singleton record; can be used to both destruct a record when in a pattern position or construct one in an expression position.>The empty record?The singleton record@<Turns a singleton record into a pair of the label and value.A~Record extension. The row may already contain the label, in which case the origin value can be obtained after restriction () with the label.B+Update the value associated with the label.C-Focus on the value associated with the label.DFocus on a sub-recordERename a label.FRecord selectionG7Record restriction. Remove the label l from the record.H#Record disjoint union (commutative)I$Split a record into two sub-records.JEArbitrary record restriction. Turn a record into a subset of itself.KIRemoves a label from the record but does not remove the underlying value.,This is faster than regular record removal (°) but should only be used when either: the record will never be merged with another record again, or a new value will soon be placed into the record at this label (as in, an B# that is split over two commands).-If the resulting record is then merged (with ]) with another record that contains a value at that label, an "impossible" error will occur.LA standard foldMA fold with labelsN+A fold over two row type structures at onceOTurns a record into a ”D from values representing the labels to the values of the record.P3A function to map over a record given a constraint.Q4A function to map over a record given no constraint.RwLifts a natrual transformation over a record. In other words, it acts as a record transformer to convert a record of f a values to a record of g aQ values. If no constraint is needed, instantiate the first type argument with   or use S.S A version of R! for when there is no constraint.T A version of U in which the constraint for  can be chosen.U%Applicative sequencing over a record.V A version of W in which the constraint for  can be chosen.W”Convert from a record where two functors have been mapped over the types to one where the composition of the two functors is mapped over the types.X A version of Y in which the constraint for  can be chosen.YąConvert from a record where the composition of two functors have been mapped over the types to one where the two functors are mapped individually one at a time over the types.Z;Zips together two records that have the same set of labels.[ĸ1A helper function for unsafely adding an element to the front of a record. This can cause the resulting record to be malformed, for instance, if the record already contains labels that are lexicographically before the given label. Realistically, this function should only be used when writing calls to .\7Initialize a record with a default value at each label.]FInitialize a record with a default value at each label; works over an •.^hInitialize a record, where each value is determined by the given function over the label at that value._†Initialize a record, where each value is determined by the given function over the label at that value. This function works over an •.`*Initialize a record that is produced by a .>"#$'./;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`>#$;'">?=@\]^_`AGJIBCDEFH<PQRSLMNOZUTWYVX./K[’–—˜™š“›œ;<6=7?7G6H6None%&'+,-.;<=>?EFNOQSTVbdhĨ žIVMap is used internally as a type level lambda for defining variant maps.fThe variant type.g†A pattern for variants; can be used to both destruct a variant when in a pattern position or construct one in an expression position.hcAn unsafe way to make a Variant. This function does not guarantee that the labels are all unique.i)A Variant with no options is uninhabited.j2A quick constructor to create a singleton variant.k*Make the variant arbitrarily more diverse.l_If the variant exists at the given label, update it to the given value. Otherwise, do nothing.mhIf the variant exists at the given label, focus on the value associated with it. Otherwise, do nothing.nRename the given label.oƒConvert a variant into either the value at the given label or a variant without that label. This is the basic variant destructor.p A version of o# that ignores the leftover variant.qA trial over multiple typesrXA convenient function for using view patterns when dispatching variants. For example:   myShow :: Var ("y" '::= String :| "x" '::= Int :| Empty) -> String myShow (view x -> Just n) = "Int of "++show n myShow (view y -> Just s) = "String of "++ss&Split a variant into two sub-variants.tGArbitrary variant restriction. Turn a variant into a subset of itself.uA standard foldvA fold with labelsw+A fold over two row type structures at oncex4A function to map over a variant given a constraint.y5A function to map over a variant given no constraint.zzLifts a natrual transformation over a variant. In other words, it acts as a variant transformer to convert a variant of f a values to a variant of g aQ values. If no constraint is needed, instantiate the first type argument with  .{ A form of  transformC# that doesn't have a constraint on a|%Applicative sequencing over a variant}•Convert from a variant where two functors have been mapped over the types to one where the composition of the two functors is mapped over the types.~ēConvert from a variant where the composition of two functors have been mapped over the types to one where the two functors are mapped individually one at a time over the types.ĸBA helper function for unsafely adding an element to the front of a variant. This can cause the type of the resulting variant to be malformed, for instance, if the variant already contains labels that are lexicographically before the given label. Realistically, this function should only be used when writing calls to .€ļInitialize a variant from a producer function that accepts labels. If this function returns more than one possibility, then one is chosen arbitrarily to be the value in the variant.1"#$'.fghijklmnopqrstuvwxyz{|}~€1#$f'"gj€klmniopqrtsxyz{uvw|}~.hŸ ĄžĒĢfĪNone%&'+,-.;<=>?AEFNOQSTVbdhŽI…A f and a ;, can combine if their rows line up properly.†ĪGiven a Variant and a Record of functions from each possible value of the variant to a single output type, apply the correct function to the value in the variant.‡ The same as switch% but with the argument order reversed…†‡…†‡…†‡None%&'+,-.;<=>?EFNOQSTVbdh­†'"#$'.;<=>?@FGHfgikopq…†‡'#$f;'"…†‡>?=@GFH<gkiopq.Ĩ      !"#$%&''())*+,-./0123456789:;<=>?@ABCDEFGHI"! JKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklFGImnopJKMNOQRSTVXZ\_qrstuvwxyz{|}~€~‚ƒ„…†‡ˆ‰ƒŠ‹‹Œ„Ž‘’“”(row-types-0.2.2.0-AngIbP4jF5o3H64HKRsTsKData.Row.InternalData.Row.RecordsData.Row.VariantsData.Row.SwitchData.Rowbase GHC.TypeLits KnownSymbol≈ZipMapDisjointSubsetAllUniqueLabels WellBehavedLabelsUnconstrained1Forall2 metamorph2IsAasAsForall metamorph metamorph'FoldStep.==HasTypeLacks.\/.\\.+.-.!RenameModifyExtend.\HideTypeEmptyLabelLT:->RowRshow'toKey mapForall uniqueMap freeForalllabelslabels' $fShowLabel $fIsAkkcff $fForall2RRc $fForall2RRc0$fUnconstrained$fUnconstrained1ka $fLackslr$fIsLabelxLabel $fForallRc $fForallRc0 $fHasTypelarRec:+:==empty unSingletonextendupdatefocus multifocusrenamesplitrestrict unsafeRemoveeraseeraseWithLabelseraseZiperaseToHashMapmapmap' transform transform' sequence'sequencecompose'compose uncompose' uncomposezipunsafeInjectFrontdefault'defaultA fromLabels fromLabelsAfromLabelsMapA $fNFDataRec $fBoundedRec$fOrdRec$fEqRec $fShowRecVarIsJust unsafeMakeVar impossible singleton diversifytrialtrial' multiTrialview $fNFDataVar$fOrdVar$fEqVar $fShowVarSwitchswitchcaseon $fSwitchRRb $fSwitchRRx<=.?DiffModifyR Unconstrained MapForall#text-1.2.2.2-EakMpasry3jA6OIwSZhq9MData.Text.InternalText unMapForallRZipPairRMap3unordered-containers-0.2.8.0-3iSQJVS3Sio885UUC852ojData.HashMap.BaseHashMapGHC.Base Applicative unRZipPairRMap2unRMap2unRMapORVMapVMap2unVMap2unVMapOneOf