hOA+      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~         !"#$%&'()*Safe +,-./01234567,234567 +,-./01234567Safe+DOQRT UUsing parametricity as an approximation of a natural transformation in two arguments.        0(C) 2011-2015 Edward Kmett BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> provisionalportable Trustworthy/0T%  Y identifies foldable structures with two different varieties of elements (as opposed to 8:, which has one variety of element). Common examples are 9 and '(,)': instance Bifoldable Either where bifoldMap f _ (Left a) = f a bifoldMap _ g (Right b) = g b instance Bifoldable (,) where bifoldr f g z (a, b) = f a (g b z) A minimal   definition consists of either  or b. When defining more than this minimal set, one should ensure that the following identities hold:  "a  : :  f g "a  (; . f) (; . g) <  f g z t "a = ( (Endo . f) (Endo . g) t) z If the type is also a  Bifunctor instance, it should satisfy: ('bifoldMap' f g "a 'bifold' . 'bimap' f gwhich implies that ;'bifoldMap' f g . 'bimap' h i "a 'bifoldMap' (f . h) (g . i)4Combines the elements of a structure using a monoid.  "a  : :UCombines the elements of a structure, given ways of mapping them to a common monoid.  f g "a  (; . f) (; . g) <cCombines the elements of a structure in a right associative manner. Given a hypothetical function %toEitherList :: p a b -> [Either a b]T yielding a list of all elements of a structure in order, the following would hold:  f g z "a > (? f g) z . toEitherListaCombines the elments of a structure in a left associative manner. Given a hypothetical function %toEitherList :: p a b -> [Either a b]T yielding a list of all elements of a structure in order, the following would hold:  f g z "a @ (acc -> ?# (f acc) (g acc)) z . toEitherListHNote that if you want an efficient left-fold, you probably want to use  instead of . The reason is that the latter does not force the "inner" results, resulting in a thunk chain which then must be evaluated from the outside-in.As D, but strict in the result of the reduction functions at each step. A variant of N that has no base case, and thus may only be applied to non-empty structures.2Right associative monadic bifold over a structure.As D, but strict in the result of the reduction functions at each step. This ensures that each step of the bifold is forced to weak head normal form before being applied, avoiding the collection of thunks that would otherwise occur. This is often what you want to strictly reduce a finite structure to a single, monolithic result (e.g., "). A variant of N that has no base case, and thus may only be applied to non-empty structures.1Left associative monadic bifold over a structure.Map each element of a structure using one of two actions, evaluate these actions from left to right, and ignore the results. For a version that doesn't ignore the results, see .As f, but with the structure as the primary argument. For a version that doesn't ignore the results, see .,> bifor_ ('a', "bc") print (print . reverse)'a'"cb"As M, but ignores the results of the functions, merely performing the "actions".As 1, but with the structure as the primary argument.As ), but ignores the results of the actions.Evaluate each action in the structure from left to right, and ignore the results. For a version that doesn't ignore the results, see .1The sum of a collection of actions, generalizing $.1The sum of a collection of actions, generalizing $. ACollects the list of elements of a structure, from left to right.!$Test whether the structure is empty."4Returns the size/length of a finite structure as an A.#(Does the element occur in the structure?$AReduces a structure of lists to the concatenation of those lists.%-The largest element of a non-empty structure.&+The least element of a non-empty structure.'The '9 function computes the sum of the numbers of a structure.(The (> function computes the product of the numbers of a structure.)vGiven a means of mapping the elements of a structure to lists, computes the concatenation of all such lists in order.**I returns the conjunction of a container of Bools. For the result to be B , the container must be finite; C, however, results from a C& value finitely far from the left end.++I returns the disjunction of a container of Bools. For the result to be C , the container must be finite; B, however, results from a B& value finitely far from the left end.,UDetermines whether any element of the structure satisfies the appropriate predicate.-TDetermines whether all elements of the structure satisfy the appropriate predicate..\The largest element of a non-empty structure with respect to the given comparison function./ZThe least element of a non-empty structure with respect to the given comparison function.00 is the negation of #.1The 1{ function takes a predicate and a structure and returns the leftmost element of the structure matching the predicate, or D if there is no such element.:EFGHIJ  !"#$%&'()*+,-./01K23456789:;<=>?%  !"#$%&'()*+,-./01%  !"#%&'($)*+,-./012EFGHIJ  !"#$%&'()*+,-./01K23456789:;<=>?(C) 2011-2015 Edward Kmett BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> provisionalportable Trustworthy/0T Lright-to-left state transformerMleft-to-right state transformer@@_ identifies bifunctorial data structures whose elements can be traversed in order, performing N or OQ actions at each element, and collecting a result structure with the same shape.As opposed to PZ data structures, which have one variety of element on which an action can be performed, @6 data structures have two such varieties of elements.A definition of A! must satisfy the following laws:  naturalityA (t . f) (t . g) "a t . A f g) for every applicative transformation tidentityA Q Q "a Q compositionCompose . R (A g1 g2) . A f1 f2 "a S (Compose . R g1 . f1) (Compose . R g2 . f2) where an applicative transformation is a function t :: (N f, N g) => f a -> g apreserving the N operations: t (T x) = T x t (f U x) = t f U t x and the identity functor Q and composition functors Compose are defined as newtype Identity a = Identity { runIdentity :: a } instance Functor Identity where fmap f (Identity x) = Identity (f x) instance Applicative Identity where pure = Identity Identity f <*> Identity x = Identity (f x) newtype Compose f g a = Compose (f (g a)) instance (Functor f, Functor g) => Functor (Compose f g) where fmap f (Compose x) = Compose (fmap (fmap f) x) instance (Applicative f, Applicative g) => Applicative (Compose f g) where pure = Compose . pure . pure Compose f <*> Compose x = Compose ((<*>) <$> f <*> x)Some simple examples are 9 and '(,)': instance Bitraversable Either where bitraverse f _ (Left x) = Left <$> f x bitraverse _ g (Right y) = Right <$> g y instance Bitraversable (,) where bitraverse f g (x, y) = (,) <$> f x <*> g y@3 relates to its superclasses in the following ways: V f g "a W . A (Q . f) (Q . g)  f g = X . A (Y . f) (Y . g) These are available as I and J respectively.AEvaluates the relevant functions at each element in the structure, running the action, and builds a new structure with the same shape, using the elements produced from sequencing the actions. A f g "a B . V f g,For a version that ignores the results, see .BSequences all the actions in a structure, building a new structure with the same shape using the results of the actions. For a version that ignores the results, see . B "a A : :CAs A, but uses evidence that m is a O rather than an N.. For a version that ignores the results, see . C f g "a D . V f g C f g "a Z . A ([ . f) ([ . g) DAs B, but uses evidence that m is a O rather than an N.. For a version that ignores the results, see . D "a C : : D "a Z . B . V [ [ EE is AX with the structure as the first argument. For a version that ignores the results, see .FF is CX with the structure as the first argument. For a version that ignores the results, see .GThe G( function behaves like a combination of V and J; it traverses a structure from left to right, threading a state of type aH and using the given actions to compute new elements for the structure.HThe H( function behaves like a combination of V and J; it traverses a structure from right to left, threading a state of type aH and using the given actions to compute new elements for the structure.IA default definition of V in terms of the @ operations. I f g "a W . A (Q . f) (Q . g)JA default definition of  in terms of the @ operations. J f g "a X . A (Y . f) (Y . g)!L\]M^_@ABCDEFGHIJKLMNOPQRSTUVWXYZ @ABCDEFGHIJ @ABDCEFGHIJL\]M^_@ABCDEFGHIJKLMNOPQRSTUVWXYZSafe +05CDR[\]^_`ab[\][\]ba`_^[\]^_`ab4(C) 2008-2016 Edward Kmett, (C) 2015-2016 Ryan Scott BSD-style (see the file LICENSE) Edward KmettTemplate HaskellUnsafe`"A mapping of type variable Names to their map function Names. For example, in a Bifunctor declaration, a TyVarMap might look like (a ~> f, b ~> g), where a and b are the last two type variables of the datatype, and f and g are the two functions which map their respective type variables.aEWhether a type is not of kind *, is of kind *, or is a kind variable.b8Does a Type have kind * or k (for some kind variable k)?cReturns d the kind variable e of a a# if it exists. Otherwise, returns D.fjConcat together all of the StarKindStatuses that are IsKindVar and extract the kind variables' Names out.g Test if an 9 value is the h= constructor. Provided as standard with GHC 7.8 and above.iPull the value out of an 9/ where both alternatives have the same type. ?\x -> fromEither (Left x ) == x \x -> fromEither (Right x) == xjj takes a list of Bools and a list of some elements and filters out these elements for which the corresponding value in the list of Bools is False. This function does not check whether the lists have equal length.kk takes a list of Bools and two lists as input, and outputs a new list consisting of elements from the last two input lists. For each Bool in the list, if it is B;, then it takes an element from the former list. If it is C~, it takes an element from the latter list. The elements taken correspond to the index of the Bool in its list. For example: @filterByLists [True, False, True, False] "abcd" "wxyz" = "axcz" AThis function does not check whether the lists have equal length.ll takes a list of Bools and a list of some elements and partitions the list according to the list of Bools. Elements corresponding to B+ go to the left; elements corresponding to C go to the right. For example, ;partitionByList [True, False, True] [1,2,3] == ([1,3], [2])D This function does not check whether the lists have equal length.m Apply an Either Exp Exp expression to an n expression, preserving the 9-ness.o"Returns True if a Type has kind *.phasKindVarChain n kind Checks if kindj is of the form k_0 -> k_1 -> ... -> k_(n-1), where k0, k1, ..., and k_(n-1) can be * or kind variables.qEIf a Type is a SigT, returns its kind signature. Otherwise, return *.rKGenerate a list of fresh names with a common prefix, and numbered suffixes.s)Applies a typeclass constraint to a type.tChecks to see if the last types in a data family instance can be safely eta- reduced (i.e., dropped), given the other types. This checks for three conditions: +All of the dropped types are type variables%All of the dropped types are distinct<None of the remaining types mention any of the dropped typesuiExtract Just the Name from a type variable. If the argument Type is not a type variable, return Nothing.vdExtract the Name from a type variable. If the argument Type is not a type variable, throw an error.w6Peel off a kind signature from a Type (if it has one).xIs the given type a variable?yPIs the given type a type family constructor (and not a data family constructor)?zAAre all of the items in a list (which have an ordering) distinct?HThis uses Set (as opposed to nub) for better asymptotic time complexity.{9Does the given type mention any of the Names in the list?|@Does an instance predicate mention any of the Names in the list?})Construct a type via curried application.~7Fully applies a type constructor to its type variables.HSplit an applied type into its individual components. For example, this: Either Int Char would split to this: [Either, Int, Char] ESplit a type signature by the arrows on its spine. For example, this: .forall a b. (a ~ b) => (a -> b) -> Char -> () would split to this: (a ~ b, [a -> b, Char, ()]) )Like uncurryType, except on a kind level.Q`abcfgijklmopqrstuvwxyz{|}~Q`abcfgijklmopqrstuvwxyz{|}~N`abcfgijklmopqrstuvwxyz{|}~4(C) 2008-2016 Edward Kmett, (C) 2015-2016 Ryan Scott BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> provisionalportableUnsafeM,6A representation of which function is being generated.1A representation of which class is being derived.i4Options that further configure how the functions in Data.Bifunctor.TH should behave.kIf B`, derived instances for empty data types (i.e., ones with no data constructors) will use the  EmptyCase language extension. If C$, derived instances will simply use ; instead. (This has no effect on GHCs before 7.8, since  EmptyCase' is only available in 7.8 or later.)l Conservative i that doesn't attempt to use  EmptyCaseG (to prevent users from having to enable that extension at use sites.)m Generates a G instance declaration for the given data type or data family instance.nLike m, but takes an i argument.o1Generates a lambda expression which behaves like bimap (without requiring a  instance).pLike o, but takes an i argument.q Generates a G instance declaration for the given data type or data family instance.rLike q, but takes an i argument.tLike s, but takes an i argument.u1Generates a lambda expression which behaves like  bifoldMap (without requiring a  instance).vLike u, but takes an i argument.w1Generates a lambda expression which behaves like bifoldr (without requiring a  instance).xLike w, but takes an i argument.y1Generates a lambda expression which behaves like bifoldl (without requiring a  instance).zLike y, but takes an i argument.{ Generates a G instance declaration for the given data type or data family instance.|Like {, but takes an i argument.}1Generates a lambda expression which behaves like  bitraverse (without requiring a  instance).~Like }, but takes an i argument.1Generates a lambda expression which behaves like  bisequenceA (without requiring a  instance).Like makeBitraverseA, but takes an i argument.1Generates a lambda expression which behaves like bimapM (without requiring a  instance).Like , but takes an i argument.1Generates a lambda expression which behaves like  bisequence (without requiring a  instance).Like , but takes an i argument.PDerive a class instance declaration (depending on the BiClass argument's value).Generates a declaration defining the primary function(s) corresponding to a particular class (bimap for Bifunctor, bifoldr and bifoldMap for Bifoldable, and bitraverse for Bitraversable).NFor why both bifoldr and bifoldMap are derived for Bifoldable, see Trac #7436.DGenerates a lambda expression which behaves like the BiFun argument.gGenerates a lambda expression for the given constructors. All constructors must be from the same type.7Generates a lambda expression for a single constructor.CGenerates a lambda expression for a single constructor's arguments.^Generates a lambda expression for a single argument of a constructor. The returned value is hM if its type mentions one of the last two type parameters. Otherwise, it is .JGenerates a lambda expression for a specific type. The returned value is hM if its type mentions one of the last two type parameters. Otherwise, it is .Attempt to derive a constraint on a Type. If successful, return Just the constraint and any kind variable names constrained to *. Otherwise, return Nothing and the empty list.dSee Note [Type inference in derived instances] for the heuristics used to come up with constraints.Either the given data type doesn't have enough type variables, or one of the type variables to be eta-reduced cannot realize kind *.rOne of the last two type variables appeard in a contravariant position when deriving Bifoldable or Bitraversable.YA constructor has a function argument in a derived Bifoldable or Bitraversable instance.ZThe data type has a DatatypeContext which mentions one of the eta-reduced type variables.bThe data type has an existential constraint which mentions one of the eta-reduced type variables.The data type mentions one of the n eta-reduced type variables in a place other than the last nth positions of a data type in a constructor's field.}One of the last type variables cannot be eta-reduced (see the canEtaReduce function for the criteria it would have to meet).Iijklmnopqrstuvwxyz{|}~'Bifunctor, Bifoldable, or Bitraversable(The type constructor or data family nameThe datatype context*The types to instantiate the instance with1Are we dealing with a data family instance or notijklmnopqrstuvwxyz{|}~mnopqrstuvwxyz{|}~ijkl@ijklmnopqrstuvwxyz{|}~(C) 2011-2015 Edward Kmett BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> provisionalportableSafe a  b "a V ( :) ( :)  a  b a  b "a V    a  b Lift binary functionsLift ternary functions V 44444(C) 2008-2016 Edward Kmett BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> provisionalportableSafe +/05:CDQR Compose two s on the inside of a . (C) 2008-2016 Edward Kmett BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> provisionalportableSafe +05CDRMake a  over the first argument of a . Mnemonic: Cl owns to the l1eft (parameter of the Bifunctor), joker s to the right.  (C) 2008-2016 Edward Kmett BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> provisional non-portableSafe+/05:DGreatest fixpoint of a  (a ' over the first argument with zipping). (C) 2008-2016 Edward Kmett BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> provisionalportableSafe+05DMake a  flipping the arguments of a .   (C) 2008-2016 Edward Kmett BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> provisional non-portableSafe+/05:DMake a  over both arguments of a . (C) 2008-2016 Edward Kmett BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> provisionalportableSafe +05CDRMake a  over the second argument of a . Mnemonic: Cl owns to the l1eft (parameter of the Bifunctor), joker s to the right.  )(C) 2008-2016 Jesse Selover, Edward Kmett BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> provisionalportableSafe +05CDR"Form the product of two bifunctors(C) 2008-2016 Edward Kmett BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> provisionalportableSafe +/05:CDQR Compose a  on the outside of a .          (C) 2008-2016 Edward Kmett BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> provisionalportableSafe +05CDRMake a  over the second argument of a .  !"#$ !"#$ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{{|}~                        !"#$%&'()*+,-./0123456789:;<=>?@ABCDECFGCHICHJCHKCLMCDNCFOCDPQRSQRTQRUCHVWWXYYZ[\]CH^CH_C`aCbcCHdC`eCHfCHgChiCbjCklCkmCnoCnp\q]rstuvCHwxyz{|CF}~xyQ$WCFCHChChChCH%bifunctors-5.5-32pcfa06LpVCOUG1IJODTZData.Bifunctor.FunctorData.BifoldableData.BitraversableData.Bifunctor.SumData.Bifunctor.THData.BiapplicativeData.Bifunctor.BiffData.Bifunctor.ClownData.Bifunctor.FixData.Bifunctor.FlipData.Bifunctor.JoinData.Bifunctor.JokerData.Bifunctor.ProductData.Bifunctor.TannenData.Bifunctor.WrappedPaths_bifunctors bitraversebiforbimapM bisequenceA bisequenceData.Bifunctor.TH.InternalBifunctorComonad biextractbiextend biduplicateBifunctorMonadbireturnbibindbijoinBifunctorFunctorbifmap:->biliftMbiliftW Bifoldablebifold bifoldMapbifoldrbifoldlbifoldr'bifoldr1bifoldrMbifoldl'bifoldl1bifoldlM bitraverse_bifor_bimapM_biforM_ bisequenceA_ bisequence_biasumbimsumbiListbinullbilengthbielembiconcat bimaximum biminimumbisum biproduct biconcatMapbiandbiorbianybiall bimaximumBy biminimumBy binotElembifind $fMonoidMin $fMonoidMax$fBifoldableEither$fBifoldableTagged$fBifoldable(,,,,,,)$fBifoldable(,,,,,)$fBifoldable(,,,,)$fBifoldable(,,,)$fBifoldable(,,)$fBifoldableK1$fBifoldableConstant$fBifoldableConst$fBifoldable(,)$fBifoldableArg BitraversablebiforM bimapAccumL bimapAccumR bimapDefaultbifoldMapDefault$fApplicativeStateR$fFunctorStateR$fApplicativeStateL$fFunctorStateL$fBitraversableTagged$fBitraversableK1$fBitraversableConstant$fBitraversableConst$fBitraversableEither$fBitraversable(,,,,,,)$fBitraversable(,,,,,)$fBitraversable(,,,,)$fBitraversable(,,,)$fBitraversable(,,)$fBitraversable(,)$fBitraversableArgSumL2R2$fBifunctorMonadkkSum$fBifunctorFunctorkkkkSum$fBitraversableSum$fBifoldableSum$fBifunctorSum$fEqSum$fOrdSum $fShowSum $fReadSum $fGenericSum $fGeneric1SumOptionsemptyCaseBehaviordefaultOptionsderiveBifunctorderiveBifunctorOptions makeBimapmakeBimapOptionsderiveBifoldablederiveBifoldableOptions makeBifoldmakeBifoldOptions makeBifoldMapmakeBifoldMapOptions makeBifoldrmakeBifoldrOptions makeBifoldlmakeBifoldlOptionsderiveBitraversablederiveBitraversableOptionsmakeBitraversemakeBitraverseOptionsmakeBisequenceAmakeBisequenceAOptions makeBimapMmakeBimapMOptionsmakeBisequencemakeBisequenceOptions $fEqOptions $fOrdOptions $fReadOptions $fShowOptions $fEqBiFun Biapplicativebipure<<*>>*>><<*<<$>><<**>>biliftA2biliftA3$fBiapplicativeConst$fBiapplicativeTagged$fBiapplicative(,,,,,,)$fBiapplicative(,,,,,)$fBiapplicative(,,,,)$fBiapplicative(,,,)$fBiapplicative(,,)$fBiapplicativeArg$fBiapplicative(,)BiffrunBiff$fBitraversableBiff$fTraversableBiff$fBifoldableBiff$fFoldableBiff$fBiapplicativeBiff $fFunctorBiff$fBifunctorBiff$fEqBiff $fOrdBiff $fShowBiff $fReadBiff $fGenericBiff$fGeneric1BiffClownrunClown$fTraversableClown$fBitraversableClown$fFoldableClown$fBifoldableClown$fBiapplicativeClown$fFunctorClown$fBifunctorClown $fEqClown $fOrdClown $fShowClown $fReadClown$fGenericClown$fGeneric1ClownFixInout$fTraversableFix $fFoldableFix$fApplicativeFix $fFunctorFix $fGenericFix $fReadFix $fShowFix$fOrdFix$fEqFixFliprunFlip$fBifunctorFunctorkkkkFlip$fTraversableFlip$fBitraversableFlip$fFoldableFlip$fBifoldableFlip$fBiapplicativeFlip $fFunctorFlip$fBifunctorFlip$fEqFlip $fOrdFlip $fShowFlip $fReadFlip $fGenericFlipJoinrunJoin$fTraversableJoin$fFoldableJoin$fApplicativeJoin $fFunctorJoin $fGenericJoin $fReadJoin $fShowJoin $fOrdJoin$fEqJoinJokerrunJoker$fTraversableJoker$fBitraversableJoker$fFoldableJoker$fBifoldableJoker$fBiapplicativeJoker$fFunctorJoker$fBifunctorJoker $fEqJoker $fOrdJoker $fShowJoker $fReadJoker$fGenericJoker$fGeneric1JokerProductPair$fBifunctorComonadkkProduct$fBifunctorFunctorkkkkProduct$fBitraversableProduct$fBifoldableProduct$fBiapplicativeProduct$fBifunctorProduct $fEqProduct $fOrdProduct $fShowProduct $fReadProduct$fGenericProduct$fGeneric1ProductTannen runTannen$fArrowPlusTannen$fArrowZeroTannen$fArrowLoopTannen$fArrowChoiceTannen $fArrowTannen$fCategorykTannen$fBitraversableTannen$fTraversableTannen$fBifoldableTannen$fFoldableTannen$fBiapplicativeTannen$fFunctorTannen$fBifunctorTannen$fBifunctorComonadkkTannen$fBifunctorMonadkkTannen$fBifunctorFunctorkkkkTannen $fEqTannen $fOrdTannen $fShowTannen $fReadTannen$fGenericTannen$fGeneric1TannenWrappedBifunctor WrapBifunctorunwrapBifunctor$fBitraversableWrappedBifunctor$fTraversableWrappedBifunctor$fBifoldableWrappedBifunctor$fFoldableWrappedBifunctor$fBiapplicativeWrappedBifunctor$fFunctorWrappedBifunctor$fBifunctorWrappedBifunctor$fEqWrappedBifunctor$fOrdWrappedBifunctor$fShowWrappedBifunctor$fReadWrappedBifunctor$fGenericWrappedBifunctor$fGeneric1WrappedBifunctorcatchIOversionbindirlibdirdatadir libexecdir sysconfdir getBinDir getLibDir getDataDir getLibexecDir getSysconfDirgetDataFileNamebase Data.FoldableFoldable Data.EitherEitherGHC.Baseidmappendmempty Data.MonoidappEndofoldreitherfoldlghc-prim GHC.TypesIntTrueFalseNothingMingetMinMaxgetMax#.StateRStateL ApplicativeMonadData.Traversable TraversableData.Functor.IdentityIdentityfmaptraversepure<*>Data.Bifunctorbimap runIdentityData.Functor.ConstgetConstConstControl.Applicative unwrapMonad WrapMonad runStateR runStateLTyVarMapStarKindStatuscanRealizeKindStarstarKindStatusToNameJusttemplate-haskellLanguage.Haskell.TH.SyntaxNamecatKindVarNamesisRightRight fromEither filterByList filterByListspartitionByList appEitherEExp hasKindStarhasKindVarChaintyKind newNameList applyClass canEtaReducevarTToName_maybe varTToNameunSigTisTyVar isTyFamily allDistinct mentionsNamepredMentionsNameapplyTy applyTyCon unapplyTy uncurryTy uncurryKind NotKindStarKindStar IsKindVarapplySubstitutionKindsubstNameWithKindsubstNamesWithKindStar bimapConst bifoldrConstbifoldMapConstbitraverseConst isStarOrVarthd3unsnocbifunctorsPackageKeymkBifunctorsName_tcmkBifunctorsName_vbimapConstValNamebifoldrConstValNamebifoldMapConstValName coerceValNamebitraverseConstValName dualDataName endoDataNamewrapMonadDataNamefunctorTypeNamefoldableTypeNametraversableTypeNameappEndoValNamecomposeValName idValName errorValName flipValName fmapValName foldrValNamefoldMapValNamegetDualValName seqValNametraverseValNameunwrapMonadValNamebifunctorTypeName bimapValName pureValName apValName liftA2ValNamemappendValName memptyValNamebifoldableTypeNamebitraversableTypeNamebifoldrValNamebifoldMapValNamebitraverseValNameBiFunBiClassGHC.Primseq Bifunctor deriveBiClass biFunDecs makeBiFunmakeBiFunForConsmakeBiFunForConmakeBiFunForArgsmakeBiFunForArgLeftmakeBiFunForTypederiveConstraintderivingKindErrorcontravarianceErrornoFunctionsErrordatatypeContextErrorexistentialContextErroroutOfPlaceTyVarErroretaReductionErrorBimapBifoldr BifoldMap BitraversebuildTypeInstancebiFunConstName biClassName biFunName biClassToFuns biFunToClassbiClassConstraint biFunArity allowFunTys allowExQuant biFunTrivbiFunApp biFunCombine bimapCombinebifoldrCombinebifoldMapCombinebitraverseCombinebiFunEmptyCase biFunNoCons biFunTrivialconstfirstsecondFunctor