h&zn}      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                                                                                                                                                   Safe-Inferred1 Safe-Inferred 5K  generic-dataGeneric representation of  types. generic-dataGeneric representation of  types.  generic-data Extends the   option for   to allow all constructors to have arbitrary many fields. Each field type must be an instance of both  and . Avoid fields of types  and .Details.Two restrictions require the user's attention:The  instances of the field types need to start enumerating from 0. In particular,  is an unfit field type, because the enumeration of the negative values starts before 0. There can only be up to  ::  values (because the implementation represents the cardinality explicitly as an ). This restriction makes  an invalid field type as well. Notably, it is insufficient for each individual field types to stay below this limit. Instead it applies to the generic type as a whole.Elements are numbered by , from 0 up to (cardinality - 1).. The resulting ordering matches the generic  instance defined by . The values from different constructors are enumerated sequentially. 2data Example = C0 Bool Bool | C1 Bool deriving (, , , ) cardinality = 6 -- 2 * 2 + 2 -- Bool * Bool | Bool enumeration = [ C0 False False , C0 False True , C0 True False , C0 True True , C1 False , C1 True ] enumeration == map  [0 .. 5] [0 .. 5] == map  enumeration  generic-dataStandard option for   : derive  for types with only nullary constructors (the same restrictions as in the  https://www.haskell.org/onlinereport/haskell2010/haskellch11.html#x18-18400011.2Haskell 2010 report).  generic-dataGeneric representation of  types.The opts parameter is a type-level option to select different implementations. generic-dataGeneric  generated with the   option.  instance  MyType where  =   =   =   =   =   =   generic-dataGeneric  generated with the   option. See also . generic-dataGeneric  generated with the   option. See also . generic-dataGeneric  generated with the   option. See also . generic-dataGeneric  generated with the   option. See also . generic-dataGeneric  generated with the   option. See also . generic-dataGeneric  generated with the   option.  instance  MyType where  =   =   =   =   =   =   generic-dataGeneric  generated with the   option. See also . generic-dataGeneric  generated with the   option. See also . generic-dataGeneric  generated with the   option. See also . generic-dataGeneric  generated with the   option. See also . generic-dataGeneric  generated with the   option. See also . generic-dataUnsafe generic . Does not check whether the argument is within valid bounds. Use  or  instead. generic-dataGeneric . Use  or  instead. generic-dataGeneric . Use  or  instead.  generic-data genumMin == gfromEnum gminBound! generic-data genumMax == gfromEnum gmaxBound" generic-dataGeneric . Use  or  instead.# generic-dataGeneric . Use  or  instead.$ generic-dataGeneric . Use  or  instead.% generic-dataGeneric . Use  or  instead.& generic-dataGeneric .  instance  MyType where  = &  = ' ' generic-dataGeneric . See also &.( generic-dataGeneric . import Data.Ix instance  MyType where  = (  = )  = + ) generic-dataGeneric . See also (.* generic-dataGeneric  unsafeIndex.DetailsThe functions  unsafeIndex and unsafeRangeSize belong to  but are internal to GHC and hence not exported from the module Data.Ix-. However they are exported from the module GHC.Arr. See (" for how to define an instance of  such that it does not depend on the stability of GHCs internal API. Unfortunately this results in additional (unnecessary) bound checks. With the danger of having no stability guarantees for GHC's internal API one can alternatively define an instance of  as import GHC.Arr instance  MyType where  = ( unsafeIndex = *  = + + generic-dataGeneric . See also (.(  !"#$%&'()*+( !"#$%&'()*+    Safe-Inferred /1 ; generic-data":set -XDeriveGeneric -XDerivingVia%import Generic.Data (Generically(..)):{ data AB = A | B deriving stock Generic) deriving Semigroup via Generically AB:}...= @ Cannot derive Semigroup instance for AB due to sum type3 @ When deriving the instance for (Semigroup AB);<==<; Safe-Inferred 01 @ generic-dataArity of a constructor.A generic-data&Number of constructors of a data type.B generic-data&Number of constructors of a data type.C generic-dataArity of a constructor.@ABCAB@C Safe-Inferred/01/)D generic-data Remove an  type constructor.E generic-dataA placeholder for  values.F generic-data Inferred strictness of a field ().G generic-data"Strictness annotation of a field ().H generic-data$Unpackedness annotation of a field ().I generic-data;Name of the record field; undefined for non-record fields ().J generic-dataJust- the name of the record field, if it is one ().K generic-dataTrue for a record constructor ().L generic-dataFixity of the constructor ().M generic-dataName of the constructor ().N generic-dataTrue if the data type is a newtype ().O generic-data4Name of the package where the data type is defined ()P generic-data3Name of the module where the data type is defined ()Q generic-dataName of the data type ().R generic-data field of the  type constructor.S generic-dataThrow an error if the boolean b is true, meaning that the type a is empty.Example: 7ghci> data E deriving Generic ghci> conIdMin :: ConId EError message:  ConId aconIdMin' = conIdMin:}:{conIdMax' :: (Constructors a, IsEmptyType a ~ 'False) => ConId aconIdMax' = conIdMax:}X generic-dataConstraint that a generic type a5 is not empty. Producing an error message otherwise.The  parameter fname! is used only for error messages.(It is implied by the simpler constraint U a ~ 'False] generic-data:Generic representations that contain constructor metadata.e generic-data%Constraint synonym for generic types a with a constructor named n.f generic-dataConstraint synonym for  and ].g generic-data'An opaque identifier for a constructor.i generic-data7Generic representations that contain datatype metadata.n generic-data9Name of the first data constructor in a type as a string.gdatatypeName @(Maybe Int)"Maybe"o generic-data?Name of the module where the first type constructor is defined.gmoduleName @(ZipList Int)"Control.Applicative"p generic-dataName of the package where the first type constructor is defined.gpackageName @(Maybe Int)"base"q generic-data, if the first type constructor is a newtype.gisNewtype @[Int]FalsegisNewtype @(ZipList Int)Trues generic-data)Name of the first constructor in a value.gconName (Just 0)"Just"t generic-data$The fixity of the first constructor.import GHC.Generics ((:*:)(..))gconFixity (Just 0)PrefixgconFixity ([] :*: id)Infix RightAssociative 6u generic-data if the constructor is a record.gconIsRecord (Just 0)FalsegconIsRecord (Sum 0) -- Note: newtype Sum a = Sum { getSum :: a }Truev generic-dataNumber of constructors.gconNum @(Maybe Int)2w generic-dataIndex of a constructor.gconIndex Nothing0gconIndex (Just "test")1x generic-dataIdentifier of a constructor.y generic-data8Index of a constructor, given its identifier. See also w.z generic-data Name of a constructor. See also s.{ generic-dataAll constructor identifiers. v @a = length ({ @a) | generic-dataThe first constructor. This must not be called on an empty type.} generic-data?The last constructor. This must not be called on an empty type.~ generic-dataGet a g by name.*conIdNamed @"Nothing" :: ConId (Maybe Int)ConId 0*conIdNamed @"Just" :: ConId (Maybe Int)ConId 1DEFGHIJKLMNOPQRSTUVWXYZ[\]^_`bacdefghimlkjnopqrstuvwxyz{|}~nopqrimlkjstuvwghxyz{|}~fecd]^_`ba\[ZYXWVUTSRQPONMLKJIHGFED Safe-Inferred /12/ generic-dataUse  instead. generic-dataThe type wrapped by a newtype. *newtype Foo = Foo { bar :: Bar } deriving  -- Old Foo ~ Bar  generic-data(Class of newtypes. There is an instance  a if and only if a" is a newtype and an instance of . generic-dataGeneric newtype destructor. generic-dataGeneric newtype constructor. Safe-Inferred5 generic-dataA higher-kinded version of . generic-dataA newtype with trivial instances, that considers every value equivalent to every other one, and shows as just "_". generic-data.A newtype whose instances for simple classes (, , , )) use higher-kinded class instances for f (, , , ). generic-data Shown as "_". generic-data All equal. generic-data All equal. generic-data Shown as "_". generic-data All equal. generic-data All equal. generic-data Shown as "_". generic-data All equal. generic-data All equal. generic-data Shown as "_". generic-data All equal. generic-data All equal.    Safe-Inferred)*18 generic-dataIsomorphic to Maybe m, but we need to micromanage the use of Monoid vs Semigroup to match exactly the output of stock deriving, for inspection testing. generic-dataInternal definition of . generic-dataInternal definition of . generic-data+Class of generic representations for which  can be derived. generic-data+Class of generic representations for which  can be derived. generic-dataGeneric .  instance  MyTypeF where  =   generic-dataGeneric .  instance  MyTypeF where  =   generic-dataGeneric .  instance  MyTypeF where  =   See also .  Trustworthy0<4  generic-dataConvert between types with representationally equivalent generic representations. generic-dataCompose  with a binary operation. generic-data'Coerce while preserving the type index. generic-dataElimination of V1. generic-data#A helper for better type inference. generic-data#A helper for better type inference. generic-data$Lift binary combinators generically. generic-dataReturns = if the argument is a symbolic data constructor name (e.g., (:+:) ). Returns  otherwise. generic-dataReturns 1 if the argument is a symbolic value name (e.g., (+++) ). Returns  otherwise.   Safe /1= generic-dataGeneric representation of  types. generic-dataGeneric representation of  types. generic-dataGeneric .  instance  MyType where  =   generic-dataGeneric . None 89:?D generic-dataSynthetic data type.A wrapper to view a generic  as the datatype it's supposed to represent, without needing a declaration. generic-dataConversion between a generic type and the synthetic type made using its representation. Inverse of . generic-data Inverse of .  Trustworthy)*/12AT generic-dataGeneric representation of  types. generic-dataGeneric representation of  types. generic-dataGeneric .  instance  MyType where  =   =   generic-dataGeneric . generic-data"A backwards-compatible version of ). This is needed for compatibility with base-4.9, where  only offers , not . Safe-InferredIp generic-dataGeneric ().  instance  MyType where () =   generic-dataGeneric .  instance  MyType where  =   generic-dataGeneric () (or ).  instance  MyType where () =   See also . generic-dataGeneric .  instance  MyType where  =   generic-dataGeneric () (or ).The difference from  is the  constraint instead of #, for older versions of base where  is not a superclass of . generic-dataGeneric .  instance  MyTypeF where  =   generic-dataGeneric (). See also . generic-dataGeneric .  instance  MyTypeF where  =  () =   generic-dataGeneric () (or ). See also . generic-dataGeneric . See also . generic-dataGeneric .  instance  MyTypeF where  =  () =   generic-data Generic (). See also . generic-dataGeneric .  instance  MyTypeF where  =  6This is deprecated but kept around just for reference. generic-dataGeneric .  instance  MyTypeF where  =   See also . generic-dataGeneric .  instance  MyTypeF where  =  6This is deprecated but kept around just for reference. generic-dataGeneric .  instance  MyTypeF where  =   See also .6This is deprecated but kept around just for reference. generic-dataGeneric . generic-dataGeneric .NoneW  generic-data'Product type with generic instances of  and .This is similar to  in most cases, but  also works for types T with deriving via  U, where U< is a generic product type coercible to, but distinct from T. In particular, U may not have an instance of , which  requires.Exampleimport Data.Monoid (Sum(..)))data Point a = Point a a deriving Generic:{% newtype Vector a = Vector (Point a) deriving (Semigroup, Monoid)( via GenericProduct (Point (Sum a)):} If it were via  (Point (Sum a)) instead, then Vector's  (the  method) would be defined as Point's () (the  method), which might not exist, or might not be equivalent to Vector 's generic $ instance, which would be unlawful. generic-data Type with instances derived via .Examples Deriving , ,  can be derived for types with only one constructor, aka. products.:{ Int , io :: IO Bool , int :: Int } deriving Generic deriving Show via  '["fun"  , "io"  ] Unshowable -- show (Unshowable id (pure True) 42) = "Unshowable _ _ 42"  generic-dataApply a type constructor f to the field named s in a generic record r. data Vec a = Vec { len :: Int , contents :: [a] } -- with (OnField "len" Sum) becomes -- data Vec a = Vec { len :: Sum Int , contents :: [a] }1This is a defunctionalized symbol, applied using  or . See also the synonym (). generic-dataApply a type constructor f to every field type of a type a to make a synthetic type. generic-dataApply a type constructor f2 to every field type of a generic representation r. data Color = RGB { r :: Int , g :: Int , b :: Int } -- becomes -- data Color f = RGB { r :: f Int , g :: f Int , b :: f Int }1This is a defunctionalized symbol, applied using  or . generic-dataUnify the "spines" of two generic representations (the "spine" is everything except the field types). generic-dataClosed type family for . generic-data?Define a function for a fixed set of strings, and fall back to f for the others. generic-dataConstant function. generic-data1Empty function (compile-time error when applied). generic-dataIdentity function  -> . generic-dataf @@ s; is the application of a type-level function symbolized by f to a s :: . A function FooToBar can be defined as follows: %data FooToBar type instance FooToBar  "foo" = "bar"  generic-data'Rename constructors using the function rnm given as a parameter. data Foo = Bar { baz :: Zap } -- becomes, renaming "Bar" to "Car" -- data Foo = Car { baz :: Zap }1This is a defunctionalized symbol, applied using  or . generic-data!Rename fields using the function rnm given as a parameter. data Foo = Bar { baz :: Zap } -- becomes, renaming "baz" to "bag" -- data Foo = Bar { bag :: Zap }1This is a defunctionalized symbol, applied using  or . generic-dataForget that a type is a newtype=. (The pun is that "aging" a type makes it no longer "new".) 8newtype Foo = Bar Baz -- becomes -- data Foo = Bar Baz1This is a defunctionalized symbol, applied using  or . generic-data4Forget that a type was declared using record syntax. data Foo = Bar { baz :: Zap } -- becomes -- data Foo = Bar Zap"Concretely, set the last field of  to  and forget field names.1This is a defunctionalized symbol, applied using  or . generic-data-Apply a microsurgery represented by a symbol s> (declared as a dummy data type) to a generic representation f. generic-dataSee . generic-data Plural of !. Apply a list of microsurgeries. generic-data Plural of !. Apply a list of microsurgeries. generic-dataApply a microsurgery s to a type a for  DerivingVia for the  class. generic-dataApply a microsurgery s to a type a for  DerivingVia.For the  class, see .Example {-# LANGUAGE DerivingVia #-} -- The constructors must be visible. import Generic.Data.Microsurgery (, (..), (..), () data T = T { unT :: Int } deriving  via (  T) -- T won't be shown as a record: -- show (T {unT = 3}) == "T 3"  generic-data onData :: _ => (Data r x -> Data s y) -> (Data r x -> Data s y) -- possible specializationCan be used with  generic-lens& for type-changing field updates with field_& (and possibly other generic optics).A specialization of the identity function to be used to fix types of functions on , unifying the "spines" of input and output generic representations (the "spine" is everything except field types, which may thus change).**4 Safe-Inferredm** ! "#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                                                                                                                                                       %%%%% %%%%+generic-data-1.1.0.0-B5NGeqaiCR3H9xDA0jvkTc Generic.DataGeneric.Data.Internal.CompatGeneric.Data.Internal.EnumGeneric.Data.Internal.ErrorGeneric.Data.Internal.FunctionsGeneric.Data.Internal.MetaGeneric.Data.Internal.NewtypeGeneric.Data.Internal.Resolvers!Generic.Data.Internal.TraversableGeneric.Data.Internal.UtilsGeneric.Data.Internal.ShowGeneric.Data.Internal.DataGeneric.Data.Internal.ReadGeneric.Data.Internal.Prelude!Generic.Data.Internal.GenericallyGeneric.Data.Orphans"Generic.Data.Internal.Microsurgerygcompare Text.Read greadPrecreadListPrecDefault Control.Monadap GenericallyGeneric.Data.Types Data.MonoidSumOpaqueMonoidGeneric.Data.Microsurgerybase GHC.GenericsGenericGeneric1 GHC.TypeNatsDivData.Functor.Classes readPrec1GIxgRange gUnsafeIndexgInRangeGBounded gMinBound gMaxBound FiniteEnum StandardEnumGEnum gCardinality gFromEnumgToEnumgtoEnum gfromEnum genumFrom genumFromThen genumFromTogenumFromThenTo gtoFiniteEnumgfromFiniteEnumgfiniteEnumFromgfiniteEnumFromThengfiniteEnumFromTogfiniteEnumFromThenTo gtoEnumRaw'gtoEnum' gfromEnum'genumMingenumMax genumFrom'genumFromThen' genumFromTo'genumFromThenTo' gminBound gmaxBoundgrangegindex gunsafeIndexginRange $fGEnumoptsU1$fGEnumopts:+: $fGEnumoptsM1$fGEnumFiniteEnumK1$fGEnumFiniteEnum:*: $fGBounded:*: $fGBounded:+: $fGBoundedK1 $fGBoundedU1$fGIxK1$fGIxU1$fGIx:*:$fGIx:+:$fGIxM1 $fGBoundedM1 AssertNoSumAssertHasSum$fAssertFalsemsg$fAssertTruemsgNFields NConstructors nconstructorsnfieldsUnM1 DummyMetaMetaSelStrictnessMetaSelSourceStrictness MetaSelUnpack MetaSelName MetaSelNameMMetaConsRecordMetaConsFixity MetaConsNameMetaDataNewtypeMetaDataPackageMetaDataModule MetaDataNameMetaOf ErrorIfEmpty IsEmptyType_ IsEmptyType GIsEmptyType NonEmptyType_ NonEmptyType GConIdNamedIf GConIdNamed' GConIdNamed ConIdNamed' GConstructorsgConIdToStringgConIdgConNum gConFixity gConIsRecordGConId ConIdNamed ConstructorsConId GDatatype gDatatypeName gModuleName gPackageName gIsNewtype gdatatypeName gmoduleName gpackageName gisNewtype fromDatatypegconName gconFixity gconIsRecordgconNum gconIndexconId conIdToInt conIdToString conIdEnumconIdMinconIdMax conIdNamed gConIdToInttoConId fromConIdreGConId gConIdMin gConIdMax$fGDatatypeFUNM1$fGConstructorskV1$fGConstructorskM1$fGConstructorsk:+:$fGConstructorskM10$fConstructorsa$fConIdNamedna$fNonEmptyTypefnamea $fEqGConId $fOrdGConId $fEqConId $fOrdConId $fShowConId NewtypeErrNewtype'GOldOldNewtypeunpackpack $fNewtypeaOpaque1 unOpaque1unOpaqueId1unId1 $fShowId1 $fReadId1$fOrdId1$fEqId1 $fShow1Opaque $fOrd1Opaque $fEq1Opaque $fShowOpaque $fOrdOpaque $fEqOpaque$fShow1Opaque1 $fOrd1Opaque1 $fEq1Opaque1 $fShowOpaque1 $fOrdOpaque1 $fEqOpaque1$fEq1Id1 $fOrd1Id1 $fRead1Id1 $fShow1Id1 GTraverse gtraverse_KleisliEqualReflGFoldMap gfoldMap_EndoMMaybe'Nothing'Just' GTraversable_ GFoldable_ GTraversable GFoldablegfoldMap gtraverse gsequenceA liftEndoM lowerEndoM lowerMaybe $fGFoldMap:.:$fGFoldMapRec1$fGFoldMapPar1 $fGFoldMapK1 $fGFoldMapV1 $fGFoldMapU1 $fGFoldMap:*: $fGFoldMap:+: $fGFoldMapM1 $fGFoldable_t $fGFoldablet$fGTraverseEqual:.:$fGTraverseEqualRec1$fGTraverseEqualPar1$fGTraverseKleisli:.:$fGTraverseKleisliRec1$fGTraverseKleisliPar1$fGTraversearrK1$fGTraversearrV1$fGTraversearrU1$fGTraversearr:*:$fGTraversearr:+:$fGTraversearrM1$fGTraversable_t$fGTraversabletgcoerce gcoerceBinopcoerce'coerce1absurd1from'to'liftG2 isSymDataConisSymVar GShowSinglegPrecShowsSingle GShowNamedgPrecShowsNamed GShowFieldsgPrecShowsFieldsGShowC gPrecShowsCGShow gPrecShowsGShow1 ShowsPrecGShow0 gshowsPrec gprecShowsgliftShowsPrecgLiftPrecShowssurroundConName $fGShowpV1 $fGShowp:+: $fGShowpM1 $fGShowpM10$fGShowFieldspU1$fGShowFieldsp:*:$fGShowCpMetaConsf$fGShowNamedpU1$fGShowNamedp:*:$fGShowCpMetaConsf0$fGShowSinglep:.:$fGShowSingleIdentityPar1$fGShowSingleIdentityRec1$fGShowSinglepK1$fGShowNamedpM1$fGShowFieldspM1DataunDatatoDatafromData $fBoundedData $fEnumData $fShow1Data $fShowData$fGeneric1TYPEData $fGenericData $fFunctorData$fFoldableData$fTraversableData$fApplicativeData$fAlternativeData $fMonadData$fMonadPlusData$fContravariantData$fEqData $fOrdData $fEq1Data $fOrd1Data$fSemigroupData $fMonoidData ReadPrecTreeU1LeafM1LeafBranch GReadSinglegPrecReadSingle GReadNamedgPrecReadNamed GReadFieldsgPrecReadFieldsGReadC gPrecReadCIsNullaryDataTypeisNullaryDataTypeGRead gPrecReadGRead1GRead0 gliftReadPreccoerceM1liftReadPrecCompat toReadPrec identHLexemes readPrefixCon readSurroundsnocView $fGReadpV1 $fGReadp:+:$fIsNullaryDataTypeV1$fIsNullaryDataTypeM1$fIsNullaryDataType:+: $fGReadpM1 $fGReadpM10$fGReadNamedpU1$fGReadNamedp:*:$fGReadCpMetaConsf$fGReadSinglep:.:$fGReadSingleIdentityPar1$fGReadSingleIdentityRec1$fGReadSinglepK1$fGReadNamedpM1$fGReadFieldspU1$fGReadFieldspM1$fGReadFieldsp:*:$fGReadCpMetaConsf0geqgmappendgmempty gmappend'gfmap gconstmapgpuregapgliftA2gemptygaltgfoldrgliftEq gliftCompareGenericProduct Generically1FiniteEnumeration$fBoundedGenerically$fIxGenerically$fEnumGenerically$fShowGenerically$fReadGenerically$fOrdGenerically$fEqGenerically$fGenericGenerically$fMonoidGenerically$fSemigroupGenerically$fBoundedFiniteEnumeration$fEnumFiniteEnumeration$fGenericFiniteEnumeration$fTraversableGenerically1$fFoldableGenerically1$fShowGenerically1$fShow1Generically1$fReadGenerically1$fRead1Generically1$fGeneric1TYPEGenerically1$fGenericGenerically1$fOrdGenerically1$fEqGenerically1$fAlternativeGenerically1$fApplicativeGenerically1$fFunctorGenerically1$fOrd1Generically1$fEq1Generically1$fMonoidGenericProduct$fSemigroupGenericProduct$fGenericGenericProduct $fOrd1:.:$fEq1:.: $fOrd1Par1 $fEq1Par1 $fOrd1Rec1 $fEq1Rec1 $fOrd1:+:$fEq1:+: $fOrd1:*:$fEq1:*:$fOrd1K1$fEq1K1$fOrd1U1$fEq1U1$fOrd1V1$fEq1V1$fOrd1M1$fEq1M1CopyRepDCatCat%~GOnFieldOnField DOnFields GOnFieldsOnFieldsUnifyRepSRename'SRenameSConstSErrorSId@@GRenameConstrs RenameConstrs GRenameFields RenameFieldsTypeage GDerecordify DerecordifyGSurgerySurgery' unSurgery'ProductSurgeries SurgeriesProductSurgerySurgery derecordify underecordifytypeage untypeage renameFieldsunrenameFields renameConstrsunrenameConstrsonDatacopyRep uncopyRep$fGenericSurgery'$fUnifyRepkV1g'$fUnifyRepkU1g'$fUnifyRepkK1g'$fUnifyRepk:*:g'$fUnifyRepk:+:g'$fUnifyRepkM1g'GHC.IxIxGHC.EnumBoundedEnumghc-prim GHC.TypesIntWordmaxBoundtoEnum GHC.ClassesOrdEqGHC.ShowShowfromEnumenumFrom enumFromThen enumFromToenumFromThenTominBoundrangeindexinRangeM1MetaMetaSelMetaConsMetaDataTrueSymbolGHC.ReadReadEq1Ord1Read1Show1Data.Traversable Traversable Data.FoldableFoldablefoldMaptraverse sequenceAFalse showsPrec liftShowsPrecRepreadPrec readListPrec liftReadPrec liftReadsPrec==compareGHC.Base<>mappend SemigroupmemptyfmapFunctor<$pure Applicative<*>liftA2empty Alternative<|>foldrliftEq liftCompare