!ɪ2      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~None,-.=>?@AHUVX_k(generic-data-surgeryVGenerate equality constraints between fields of two matching generic representations.generic-data-surgery%Number of constructors of a data typegeneric-data-surgery(Number of fields of a single constructorgeneric-data-surgeryPosition of a record field2generic-data-surgery A variant of 3 allowing t and t' to be inferred.3generic-data-surgery/This constraint means that the constructor row lc contains a constructor named c at position n of type isomorphic to t, and modifying it to t' yields row lc'.4generic-data-surgery A variant of 5 allowing t to be inferred.5generic-data-surgery3This constraint means that inserting a constructor c at position n in the constructor row l yields row lc. Furthermore, constructor c contains a field row l_t! compatible with the tuple type t.6generic-data-surgery A variant of 7 allowing t to be inferred.7generic-data-surgery/This constraint means that the constructor row lc contains a constructor named c at position n, and removing it from lc yields row l. Furthermore, constructor c contains a field row l_t! compatible with the tuple type t.8generic-data-surgery-This constraint means that modifying a field t named fd at position n to t' in the record field row lt yields row lt'. l is the row of fields common to lt and lt'.9generic-data-surgery-This constraint means that modifying a field t to t' at position n in the (unnamed) field row lt yields row lt'. l is the row of fields common to lt and lt'.:generic-data-surgery-This constraint means that inserting a field t named fd at position n in the record field row l yields row lt.;generic-data-surgery-This constraint means that inserting a field t at position n in the (unnamed) field row l yields row lt.<generic-data-surgery0This constraint means that the record field row lt contains a field of type t named fd at position n, and removing it yields row l.=generic-data-surgery3This constraint means that the (unnamed) field row lt contains a field of type t at position n, and removing it yields row l.>generic-data-surgery Similar to @A, but as a constraint on the standard generic representation of a directly, f ~  a.?generic-data-surgery Similar to AA, but as a constraint on the standard generic representation of a directly, f ~  a.@generic-data-surgeryThis constraint means that a is convertible from1 its simplified generic representation. Implies B a ~ C l ().Ageneric-data-surgeryThis constraint means that a is convertible to1 its simplified generic representation. Implies B a ~ C l ().Bgeneric-data-surgery3The simplified generic representation type of type a, that F and I convert to and from.Cgeneric-data-surgeryAA sterile Operating Room, where generic data comes to be altered.-Generic representation in a simplified shape l3 at the type level (reusing the constructors from  GHC.GenericsX for convenience). This representation makes it easy to modify fields and constructors.(We may also refer to the representation l as a "row" of constructors, if it represents a sum type, otherwise it is a "row" of unnamed fields or record fields for single-constructor types.x& corresponds to the last parameter of ;, and is currently ignored by this module (no support for ).Fgeneric-data-surgeryFMove fresh data to the Operating Room, where surgeries can be applied.3Convert a generic type to a generic representation.DetailsType parameters a :: ! -- Generic type l :: k -> D -- Generic representation (simplified) x :: k -- Ignored Functional dependencies a -> l Ggeneric-data-surgery>Move altered data out of the Operating Room, to be consumed by some generic function.YConvert a generic representation to a "synthetic" type that behaves like a generic type.DetailsType parameters  f :: k ->  -- # representation (proper) l :: k -> D -- Generic representation (simplified) x :: k -- Ignored Functional dependencies f -> l l -> f Implementation detailsThe synthesized representation is made of balanced binary trees, corresponding closely to what GHC would generate for an actual data type.@That structure assumed by at least one piece of code out there (aeson).Hgeneric-data-surgeryFMove altered data, produced by some generic function, to the operating room.The inverse of G.DetailsType parameters  f :: k ->  -- # representation (proper) l :: k -> D -- Generic representation (simplified) x :: k -- Ignored Functional dependencies f -> l l -> f Igeneric-data-surgeryAMove restored data out of the Operating Room and back to the real world.The inverse of F.0It may be useful to annotate the output type of I, since the rest of the type depends on it and the only way to infer it otherwise is from the context. The following annotations are possible: I :: B a -> a I @a -- with TypeApplications DetailsType parameters a :: ! -- Generic type l :: k -> D -- Generic representation (simplified) x :: k -- Ignored Functional dependencies a -> l Jgeneric-data-surgeryJ @n @t : remove the n-th field, of type t+, in a non-record single-constructor type. Inverse of L.DetailsType parameters n ::  -- Field position t ::  -- Field type lt :: k -> " -- Row with field l :: k -> 3 -- Row without field x :: k -- Ignored  Signature C% lt x -- Data with field -> (t, C+ l x) -- Field value Data without field Functional dependencies n lt -> t l n t l -> lt Kgeneric-data-surgeryK @"fdName" @n @t: remove the field fdName at position n of type t in a record type. Inverse of N.DetailsType parameters fd ::  -- Field name n ::  -- Field position t ::  -- Field type lt :: k -> " -- Row with field l :: k -> 3 -- Row without field x :: k -- Ignored  Signature C% lt x -- Data with field -> (t, C+ l x) -- Field value Data without field Functional dependencies 5fd lt -> n t l n lt -> fd t l fd n t l -> lt Lgeneric-data-surgeryL @n @t: insert a field of type t at position n) in a non-record single-constructor type. Inverse of J.DetailsType parameters n ::  -- Field position t ::  -- Field type lt :: k -> " -- Row with field l :: k -> 3 -- Row without field x :: k -- Ignored  Signature (t, C. l x) -- Field value Data without field -> C lt x -- Data with field Functional dependencies n lt -> t l n t l -> lt Mgeneric-data-surgeryCurried L.Ngeneric-data-surgeryN @"fdName" @n @t: insert a field named fdName of type t at position n in a record type. Inverse of K.DetailsType parameters fd ::  -- Field name n ::  -- Field position t ::  -- Field type lt :: k -> " -- Row with field l :: k -> 3 -- Row without field x :: k -- Ignored  Signature (t, C. l x) -- Field value Data without field -> C lt x -- Data with field Functional dependencies 5fd lt -> n t l n lt -> fd t l fd n t l -> lt Ogeneric-data-surgeryCurried N.Pgeneric-data-surgeryP @n @t @t': modify the field at position n! in a non-record via a function  f :: t -> t'" (changing the type of the field).DetailsType parameters n :: ! -- Field position t :: $ -- Initial field type t' :: ) -- Final field type lt :: k -> ( -- Row with initial field lt' :: k -> ( -- Row with final field l :: k -> 4 -- Row without field x :: k -- Ignored  Signature $(t -> t') -- Field modification -> C! lt x -- Data with field t -> C lt' x -- Data with field t' Functional dependencies 9n lt -> t l n lt' -> t' l n t l -> lt n t' l -> lt' Qgeneric-data-surgeryQ @"fdName" @n @t @t': modify the field fdName at position n in a record via a function  f :: t -> t'# (changing the type of the field).DetailsType parameters fd ::  -- Field name n :: ! -- Field position t :: $ -- Initial field type t' :: ) -- Final field type lt :: k -> ( -- Row with initial field lt' :: k -> ( -- Row with final field l :: k -> 4 -- Row without field x :: k -- Ignored  Signature $(t -> t') -- Field modification -> C! lt x -- Data with field t -> C lt' x -- Data with field t' Functional dependencies ufd lt -> n t l fd lt' -> n t' l n lt -> fd t l n lt' -> fd t' l fd n t l -> lt fd n t' l -> lt' Rgeneric-data-surgeryR @"C" @n @t : remove the n-th constructor, named C), with contents isomorphic to the tuple t. Inverse of T.DetailsType parameters c ::  -- Constructor name t :: 1 -- Tuple type to hold c's contents n :: , -- Constructor position lc :: k -> ) -- Row with constructor l :: k -> ) -- Row without constructor l_t :: k -> = -- Field row of constructor c x :: k -- Ignored  Signature C7 lc x -- Data with constructor -> Either t (C> l x) -- Constructor (as a tuple) | Data without constructor Functional dependencies :c lc -> n l l_t n lc -> c l l_t c n l l_t -> lc .Note that there is no dependency to determine t.Sgeneric-data-surgery A variant of R that can infer the tuple type t2 to hold the contents of the removed constructor.See R.DetailsExtra functional dependency  l_t -> t Tgeneric-data-surgeryT @"C" @n @t: insert a constructor C at position n( with contents isomorphic to the tuple t. Inverse of R.DetailsType parameters c ::  -- Constructor name t :: 1 -- Tuple type to hold c's contents n :: , -- Constructor position lc :: k -> ) -- Row with constructor l :: k -> ) -- Row without constructor l_t :: k -> = -- Field row of constructor c x :: k -- Ignored  Signature  Either t (CA l x) -- Constructor (as a tuple) | Data without constructor -> C* lc x -- Data with constructor Functional dependencies :c lc -> n l l_t n lc -> c l l_t c n l l_t -> lc .Note that there is no dependency to determine t.Ugeneric-data-surgery A variant of T that can infer the tuple type t3 to hold the contents of the inserted constructor.See T.DetailsExtra functional dependency  l_t -> t Vgeneric-data-surgeryV @"C" @n @t @t' : modify the n-th constructor, named C(, with contents isomorphic to the tuple t, to another tuple t'.DetailsType parameters c :: ! -- Constructor name t :: : -- Tuple type to hold c's initial contents t' :: : -- Tuple type to hold c's final contents n :: - -- Constructor position lc :: k -> / -- Row with initial constructor lc' :: k -> / -- Row with final constructor l :: k -> * -- Row without constructor l_t :: k -> 5 -- Initial field row of constructor c l_t' :: k -> F -- Final field row of constructor c x :: k -- Ignored  Signature *(t -> t') -- Constructor modification -> C- lc x -- Data with initial constructor -> C* lc' x -- Data with final constructor Functional dependencies }c lc -> n l l_t c lc' -> n l l_t' n lc -> c l l_t n lc' -> c l l_t' c n l l_t -> lc c n l l_t' -> lc' .Note that there is no dependency to determine t and t'.Wgeneric-data-surgery A variant of V that can infer the tuple types t and t'3 to hold the contents of the inserted constructor.See V.DetailsExtra functional dependencies l_t -> t l_t' -> t' U  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWUCDEFGHIBA@?>JKLMNOPQRSTUVW=<;:9876543210/.-,+)*'(%&#$!"   None'23456789:;<=>?@ABCFGHIJKLMNOPQRSTUVW'CFGHIBJLMPKNOQRTVSUWA?@>=;9<:8753642      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~3generic-data-surgery-0.2.0.0-1Xy13keLuKRJq8OtoGLxJ1Generic.Data.SurgeryGeneric.Data.Surgery.Internal*generic-data-0.4.0.0-JKKA0K7xilAIbpRzHLlpOGeneric.Data.Internal.DatafromDatatoDataDataIsTuple MatchFields GInsertConstr gInsertConstr GRemoveConstr gRemoveConstr ConstrIndex InsertConstr RemoveConstrConstrAt GInsertField gInsertField GRemoveField gRemoveFieldCoArityArity FieldIndexSucc InsertFieldDefaultMetaSel RemoveField FieldTypeOf FieldTypeAtSplitAt Arborify'ArborifyProduct ArborifySumArborifyGArborifyProductgArborifyProduct GArborifySum gArborifySum GArborify gArborifyGLinearizeProductgLinearizeProduct GLinearizeSum gLinearizeSum GLinearize gLinearizeLinearizeProduct LinearizeSum Linearize ConstrSurgery RFieldSurgery CFieldSurgery FieldSurgery ModConstrT ModConstr InsConstrT InsConstr RmvConstrT RmvConstr ModRField ModCField InsRField InsCField RmvRField RmvCFieldFromORToOR FromORRepToORRepOROfORunORtoORfromOR'toOR'fromOR removeCField removeRField insertCField insertCField' insertRField insertRField' modifyCField modifyRField removeConstr removeConstrT insertConstr insertConstrT modifyConstr modifyConstrT$fGLinearizeSumk:+:tl$fGLinearizeSumkV1tl$fGLinearizekM1$fGLinearizeProductkM1tl$fGLinearizeProductk:*:tl$fGLinearizeProductkU1tl$fGLinearizeSumkM1tl$fGLinearizekM10$fGArborifySumk:+:tl$fGArborifySumkV1tl$fGArborifykM1$fGArborifyProductkM1tl$fGArborifyProductk:*:tl$fGArborifyProductkU1tl$fGArborifySumkM1tl$fGArborifykM10$fGRemoveFieldkn:*:$fGRemoveFieldkn:+:$fGRemoveFieldknM1$fGInsertFieldkn:*:$fGInsertFieldkn:+:$fGInsertFieldknM1$fGRemoveConstrkn:+:$fGRemoveConstrknM1$fGInsertConstrkn:+:$fGInsertConstrknM1$fMatchFieldskV1g'$fMatchFieldskU1g'$fMatchFieldskK1g'$fMatchFieldsk:*:g'$fMatchFieldsk:+:g'$fMatchFieldskM1g'$fMatchFieldskM1g'0$fMatchFieldskM1g'1$fIsTupleTYPE7t$fIsTupleTYPE6t$fIsTupleTYPE5t$fIsTupleTYPE4t$fIsTupleTYPE3t$fIsTupleTYPE2t$fIsTupleTYPE1t$fIsTupleTYPE0tbase GHC.GenericsRepGeneric1ghc-prim GHC.TypesTypeGenericNatSymbol