~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ BSD-style (see the file LICENSE)sjoerd@w3future.com experimental non-portableSafe;=ST]c} A generic function using a  W works on any algebraic data type, including those with no constructors and constants. A generic function using a  7 works on any data type with at least one constructor.A generic function using a ^ works on any data type with exactly one constructor, a.k.a. records, with multiple fields ( ) or no fields ( ). is similar to ProductProfuctorI from the product-profunctor package, but using types from GHC.Generics. 9% , 3  $+2#"*1! )0(/'.&-87654   BSD-style (see the file LICENSE)sjoerd@w3future.com experimental non-portableNone&'+,-;<=>?FQSTVh&;[Automatically apply a lifted function to a polymorphic argument as many times as possible.sA constraint `FunConstraint c t` is equivalent to the conjunction of constraints `c s` for every argument type of t.If r is not a function type: c a :- FunConstraints c (a -> r) (c a, c b) :- FunConstraints c (a -> b -> r) (c a, c b, c d) :- FunConstraints c (a -> b -> d -> r) =&The result type of a curried function.If r= is not a function type (i.e., does not unify with `_ -> _`): = (a -> r) ~ r = (a -> b -> r) ~ r = (a -> b -> c -> r) ~ r @@# is a constraint type synonym. The Q instance can be derived, and any generic representation will be an instance of Y and >.BB1 is a constraint type synonym. An instance is an @! with *at least* one constructor.DD1 is a constraint type synonym. An instance is an @ with *exactly* one constructor.GG[ is a constraint type synonym, containing the constraint requirements for an instance for t of class c$. It requires an instance of class c for each component of t./9:;<=>?@ABCDEFGHIKJLMNOPQRSTUVWXYZ[\]^_`abcdefgDZYXWVUTSRQPNOih[\]LMsrqponmlkjHIJKxwvut^_`abcdefGFEDCBA@?>y=;<{z9:|g9:;<HIJKLMNOg9  BSD-style (see the file LICENSE)sjoerd@w3future.com experimental non-portable Trustworthy +<FQTVh9 }.Map over a structure, updating each component.} is d specialized to (->).~sMap each component of a structure to an action, evaluate these actions from left to right, and collect the results.~ is d specialized to . is e specialized to (->). is e specialized to .Combine two values by combining each component of the structures with the given function, under an applicative effect. Returns ! if the constructors don't match. is d specialized to  is e specialized to wImplement a unary operator by calling the operator on the components. This is here for consistency, it is the same as ^.  =  @  FImplement a binary operator by calling the operator on the components.  =  @  () =  @ ()  is  specialized to pairs.CCreate an F-algebra, given an F-algebra for each of the components.  f l r = & @c (\(Pair a b) -> f a b) (Pair l r)  is ^ specialized to . is ^ specialized to  (->). is _ specialized to ., ;=>?@ABCDEFG^_`abcdef}~,}~^ad_be`cf  @BDG?ACFE;=> BSD-style (see the file LICENSE)sjoerd@w3future.com experimental non-portableNone+,;<=>?FQTVhEGAny type is instance of , you can use it with @0 if you don't actually need a class constraint.Constraint-level  duplicate , of kind )(k -> Constraint) -> k -> k -> Constraint. Type-level join , of kind (k -> k -> k') -> k -> k'.'Get the index in the lists returned by create and createA' of the constructor of the given value.+For example, this is the implementation of put@ that generates the binary data that the above implentation of get expects: put t = putWord8 ( ( t)) <> gfoldMap @Binary put t  BSD-style (see the file LICENSE)sjoerd@w3future.com experimental non-portable Trustworthy +<FQTVh| QCreate a value (one for each constructor), given how to construct the components.  =    @ []  =    @ []  is  specialized to lists.nCreate a value (one for each constructor), given how to construct the components, under an applicative effect.Here's how to implement get from the binary4 package, first encoding the constructor in a byte: get = getWord8  \ix ->  ( @Binary ( [get]))   ix  is  specialized to .(Generate ways to consume values of type t'. This is the contravariant version of . is  specialized to . is  specialized to lists. is  specialized to .vCreate a value, given a constructor (or a function) and how to construct its components, under an applicative effect.+For example, this is the implementation of 9 for a type with a single constructor (e.g., quadruples (,,,)).  arbitrary =  @ Arbitrary arbitrary (,,,)  is  specialized to ..Map over a structure, updating each component. is  specialized to (->).GMap each component of a structure to a monoid, and combine the results.If you have a class SizeX, which measures the size of a structure, then this could be the default implementation: size =   getSum   @Size (Sum  size)  is  specialized to .sMap each component of a structure to an action, evaluate these actions from left to right, and collect the results. is  specialized to . fmap =  @   is  specialized to (->).  foldMap =  @   is  specialized to .  traverse =  @   is  specialized to .pCombine two values by combining each component of the structures to a monoid, and combine the results. Returns ! if the constructors don't match.  s t =  ( s) ( t) <>  @  s t  is  specialized to   ( m) Variant of U where you can choose the value which is returned when the constructors don't match.  s t =  @ ( ( s) ( t))  s t Combine two values by combining each component of the structures with the given function, under an applicative effect. Returns ! if the constructors don't match. is  specialized to   liftCompare =  @Ord1  liftCompare  is  specialized to   ( m) Variant of U where you can choose the value which is returned when the constructors don't match. is  specialized to HImplement a nullary operator by calling the operator for each component.  =  @   i =  @ ( i)  is  specialized to .wImplement a unary operator by calling the operator on the components. This is here for consistency, it is the same as .  =  @  FImplement a binary operator by calling the operator on the components.  =  @  () =  @ ()  is  specialized to pairs.Create a value of a record type (with exactly one constructor), given how to construct the components, under an applicative effect.Here's how to implement get from the binary package: get =  (For :: For Binary) get  is  specialized to .CCreate an F-algebra, given an F-algebra for each of the components.  f l r = & @c (\(Pair a b) -> f a b) (Pair l r)  is  specialized to . is  specialized to  (->). is  specialized to .  cotraverse =  @ Distributive  cotraverse  is  specialized to .> ;=>  ;=      !"#$%&'()*+,-./0123456789:;<=>?@@ABCDEFGHIJKLMNNOPQRSSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~DEFGHIJ^KLMbcdefghij$one-liner-1.0-AFlvLzDzsIoK5MoVPHwqdiGenerics.OneLiner.ClassesGenerics.OneLiner.InternalGenerics.OneLiner.Binary Generics.OneLiner.Internal.UnaryGenerics.OneLinerTest.QuickCheck arbitraryZiprunZipGenericEmptyProfunctoridentityzeroGenericSumProfunctorplusGenericProductProfunctormultGenericUnitProfunctorunitGenericProfunctorGenericNonEmptyProfunctorGenericRecordProfunctorabsurde1fst1snd1$fGenericUnitProfunctorTannen$fGenericUnitProfunctorProduct$fGenericUnitProfunctorClown$fGenericUnitProfunctorJoker$fGenericUnitProfunctorBiff$fGenericUnitProfunctorCostar$fGenericUnitProfunctorStar$fGenericUnitProfunctorTagged$fGenericUnitProfunctor(->) $fGenericProductProfunctorTannen!$fGenericProductProfunctorProduct$fGenericProductProfunctorClown$fGenericProductProfunctorJoker$fGenericProductProfunctorBiff $fGenericProductProfunctorCostar$fGenericProductProfunctorStar $fGenericProductProfunctorTagged$fGenericProductProfunctor(->)$fGenericRecordProfunctorp$fGenericSumProfunctorTannen$fGenericSumProfunctorProduct$fGenericSumProfunctorClown$fGenericSumProfunctorJoker$fGenericSumProfunctorStar$fGenericSumProfunctor(->)$fGenericNonEmptyProfunctorp$fGenericEmptyProfunctorTannen$fGenericEmptyProfunctorProduct$fGenericEmptyProfunctorClown$fGenericEmptyProfunctorJoker$fGenericEmptyProfunctorStar$fGenericEmptyProfunctor(->)$fGenericProfunctorp$fGenericEmptyProfunctorZip$fGenericSumProfunctorZip$fGenericProductProfunctorZip$fGenericUnitProfunctorZip$fProfunctorZipPairFunConstraints autoApply FunResultAnyTypeADT1ADT ADTNonEmpty1 ADTNonEmpty ADTRecord1 ADTRecord Constraints01 Constraints1 ConstraintsCtorindexcountADT_generic_|- SatisfiesRecordProfunctorNonEmptyProfunctor ADTProfunctor ADTRecord1' ADTNonEmpty1'ADT1' ADTRecord' ADTNonEmpty'ADT' Constraints'generic' generic1' generic01'recordrecord1record01nonEmpty nonEmpty1 nonEmpty01genericgeneric1 generic01.:$f|-:k$f|-:k0$fADT_nullaryIdentityksRec1Rec1$fADT_nullaryIdentityksPar1Par1$fADT_nullaryIdentityks:.::.:$fADT_nullaryunaryksM1M1$fADT_ProxyunaryksK1K1$fADT_IdentityunaryksK1K1$fADT_nullaryunaryks:*::*:$fADT_nullaryunaryks:+::+:$fADT_nullaryunaryksU1U1$fADT_nullaryunaryksV1V1$fGenericEmptyProfunctorCtor$fGenericSumProfunctorCtor$fGenericProductProfunctorCtor$fGenericUnitProfunctorCtor$fProfunctorCtor $fAnyTypekkab$fFunConstraintscr$fFunConstraintsc(->) $fFunctorPairgmap gtraversegmap1 gtraverse1zipWithA zipWithA1unaryOpbinaryOpalgebra dialgebra gcotraverse1DJ ctorIndex ctorIndex1$fDkcab $fAnyTypekacreatecreateAconsumecreate1createA1createA_consume1gfoldMap gfoldMap1mzipWith mzipWith' mzipWith1 mzipWith1' nullaryOpcreateA' createA1'base GHC.GenericsGeneric(profunctors-5.2.2-81Lg3gPZvnsK0vTq2V69N5Data.Profunctor.TypesStarGHC.BaseemptyGHC.NumnegateNummappendMonoid+Costar&bifunctors-5.5.2-L55ewpTj9XHdNMpvJSTebData.Bifunctor.BiffBiffGHC.EnumtoEnumminBoundGHC.Listhead$BoundedmaxBoundlast>>=Data.Functor.Compose getComposeCompose!!fromEnumData.Bifunctor.JokerJokerData.Bifunctor.ClownClownsucc.Data.Functor.ConstConstFunctorfmap Data.FoldableFoldablefoldMapData.Traversable Traversabletraversememptyghc-prim GHC.ClassescompareOrdMaybe fromInteger#tagged-0.8.5-6nJxllETKnsC7b47JUm8Be Data.TaggedTagged