e_\@      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXY Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~   non-portable experimentalgenerics@haskell.org non-portable experimentalgenerics@haskell.org HDatatype to represent the fixity of a constructor. An infix declaration + directly corresponds to an application of .  6Class for datatypes that represent data constructors. % For non-symbolic constructors, only   has to be defined. 8 The weird argument is supposed to be instantiated with C from  base, hence the complex kind.        non-portable experimentalgenerics@haskell.org$ /Semi-decidable equality for types of a family. CClass that contains the shallow conversion functions for a family. #Class for the members of a family. 8Type family describing the pattern functor of a family. Unlifted version of )(. Unlifted version of ,+. Represents constructors. %Represents composition with functors  of kind * -> *. $Is used to indicate the type that a $ particular constructor injects to. !<Represents products (sequences of fields of a constructor). "#0Represents sums (choices between constructors). $%&(Represents constructors without fields. '(<Represents constant types that do not belong to the family. )*+=Represents recursive positions. The first argument indicates  which type to recurse on. ,-.Destructor for '(:>:)'. /Destructor for . 0+For backwards-compatibility: a synonym for . 1  !"#$%&'()*+,-./0$+,-()*&'#%$!" ./0 $  !""#%$$%&''()*)*+,-,-./0 non-portable experimentalgenerics@haskell.org123 The function 3 takes a functor f. All the recursive instances 2 in that functor are wrapped by an application of r. The argument to  3# takes a function that transformes r occurrences into r'  occurrences, for every ix". In order to associate the index ix  with the correct family phi, the argument to hmap is additionally $ parameterized by a witness of type phi ix. 4Monadic version of 3. 1234123412234 non-portable experimentalgenerics@haskell.org56789:;<=>?@ABCDEFGHIJK56789:;<=>?@ABCDEFGHIJKBA@?CD>=<;EF:987GH65IJK56789:;<=>?@ABCDEFGHIJK non-portable experimentalgenerics@haskell.orgLNormal version. MMonadic version of L. NApplicative version of L. LMNLMNLMN non-portable experimentalgenerics@haskell.orgOPQRS0For constant types, we make use of the standard  equality function. OPQRSQROPSOPPQRRS non-portable experimentalgenerics@haskell.orgTUVWXTUVWXTUVWXTUVUVWX  non-portable experimentalgenerics@haskell.orgY5Given a list of datatype names, derive datatypes and  instances of class  . Z3Given the name of the index GADT, the names of the 7 types in the family, and the name (as string) for the ) pattern functor to derive, generate the Ix and   instances.  IMPORTANT&: It is assumed that the constructors 9 of the GADT have the same names as the datatypes in the  family. [)Compatibility. Use deriveFamily instead. \Derive only the  instance. Not needed if Z  is used. ]Derive only the  instances. Not needed if Z  is used. ^Derive only the  instance. Not needed if Z  is used. _Derive only the   instance. Not needed if Z  is used. YZ[\]^_YZ[\]^_YZ[\]^_  non-portable experimentalgenerics@haskell.org`ab`ab`ab`aab  non-portable experimentalgenerics@haskell.orgcdefghijklmnopqrstuvwxycdefghijklmnopqrstuvwxyponmqrlkjisthgfeuvdcwxycdefghijklmnopqrstuvwxy  non-portable experimentalgenerics@haskell.org z{|0The list in the result type allows us to get at 4 the fields of a constructor individually, which in 6 turn allows us to insert additional stuff in between  if record notation is used. }~0For constant types, we make use of the standard  show function. z{|}~ |}z{~ z{{|}}~  non-portable experimentalgenerics@haskell.org<The class fold explains how to convert a convenient algebra  : back into a function from functor to result, as required " by the standard fold function. AThe algebras passed to the fold have to work for all index types C in the family. The additional witness argument is required only  to make GHC's typechecker happy. <The type family we use to describe the convenient algebras. Fold with convenient algebras. ?For constructing algebras that are made of nested pairs rather D than n-ary tuples, it is helpful to use this pairing combinator.  non-portable experimentalgenerics@haskell.org<The class fold explains how to convert a convenient algebra  : back into a function from functor to result, as required " by the standard fold function. AThe algebras passed to the fold have to work for all index types C in the family. The additional witness argument is required only  to make GHC's typechecker happy. <The type family we use to describe the convenient algebras. Fold with convenient algebras. ?For constructing algebras that are made of nested pairs rather D than n-ary tuples, it is helpful to use this pairing combinator.  non-portable experimentalgenerics@haskell.org non-portable experimentalgenerics@haskell.orgb  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXz{|}~ !"#$%&&'(()**+,-.//0123344566789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ab c d e f g h i j k l ? @ A B C D E F G H I J K L M N O P Q R S T U m n o p q r s t u v w K x y M SvwKyMSz{|}~ multirec-0.6Generics.MultiRec.TEqGenerics.MultiRec.ConstructorGenerics.MultiRec.BaseGenerics.MultiRec.HFunctorGenerics.MultiRec.FoldGenerics.MultiRec.ComposGenerics.MultiRec.EqGenerics.MultiRec.HFixGenerics.MultiRec.THGenerics.MultiRec.ConNamesGenerics.MultiRec.FoldKGenerics.MultiRec.ShowGenerics.MultiRec.FoldAlgGenerics.MultiRec.FoldAlgKGenerics.MultiRec.ReadGenerics.MultiRec:=:Reflcast AssociativityNotAssociativeRightAssociativeLeftAssociativeFixityInfixPrefix ConstructorconName conFixityEqSeqSFamfromtoElproofPFK0unK0I0unI0C:.:D:>:Tag:*::+:RLUKunKIunIunTagunCindexHFunctorhmapAhmaphmapM:->AlgPart ParaAlgebraF ParaAlgebraF' ParaAlgebra ParaAlgebra' CoAlgebraF CoAlgebraF' CoAlgebra CoAlgebra'AlgebraF AlgebraF'AlgebraAlgebra'foldfoldMunfoldunfoldMparaparaM&tagconcomposcomposMcomposAEq1eq1HEqheqeqHFixHInhouthfromhtoderiveConstructors deriveFamily deriveSystemderivePFderiveEl deriveFam deriveEqSConNames hconNamesconNamesShow1show1HShow hShowsPrecAlg showsPrecshowspacescommas intersperseFoldalgCompAlgRead1read1 HReadPrechreader CountAtoms countatomsreadConsreadPrefixCons readInfixConsreadNoArgsConsappPrecreadPrec readsPrecread $fHEqphiKconstrInstancestripRecordNamesmkData mkInstancepfTypepfConpfField elInstancemkFrommkTomkProoffromContoCon fromFieldtoFieldtoFieldRfieldlrPlrE $fHShowphiK