0)n      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmSafe16?Base Functor for (C) 2008-2015 Edward Kmett BSD-style (see the file LICENSE)Edward Kmett <ekmett@gmail.com> experimental non-portableSafe&'016;<=>FQTV Base functor of [].%Fokkinga's postpromorphism&A generalized postpromorphism+Fokkinga's prepromorphismn1Lambek's lemma provides a default definition for ( in terms of ) and "o>The dual of Lambek's lemma, provides a default definition for " in terms of # and (2Mendler-style iteration3'Mendler-style course-of-value iteration4Elgot algebras5Elgot coalgebras: 0http://comonad.com/reader/2008/elgot-coalgebras/pWRead a list (using square brackets and commas), given a function for reading elements.#a (Base t)-coalgebraseedresulting fixed point)a (Base t)-algebra fixed pointresult !"#$%&'()*+,-./012345, .'()*+01!"#$%&-/2345 !"#$%&'()*+SafeQV) gRules of renaming data namesh9Build base functor with a sensible default configuration.e.g. `data Expr a = Lit a | Add (Expr a) (Expr a) | Expr a :* [Expr a] deriving (Show) h ''Expr  will create Gdata ExprF a x = LitF a | AddF x x | x :*$ [x] deriving (q, r, s) type instance Base (Expr a) = ExprF a instance  Recursive (Expr a) where project (Lit x) = LitF x project (Add x y) = AddF x y project (x :* y) = x :*$ y instance  Corecursive (Expr a) where embed (LitF x) = Lit x embed (AddF x y) = Add x y embed (x :*$ y) = x :*$ y  h = i j Notes:hn works properly only with ADTs. Existentials and GADTs aren't supported, as we don't try to do better than  lhttps://downloads.haskell.org/~ghc/latest/docs/html/users_guide/glasgow_exts.html#deriving-functor-instancesGHC's DeriveFunctor.i/Build base functor with a custom configuration.jDefault g : append F or $, to data type, constructors and field names.k"How to name the base functor type.Default is to append F or $.l1How to rename the base functor type constructors.Default is to append F or $.m=How to rename the base functor type field names (in records).Default is to append F or $.t$makes clauses to rename constructorsuExtract type variablesv&Apply arguments to a type constructor.wProvides substitution for typesghijklmhigjklmgxyz{|      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstusvwsxyz{|}i~6micro-recursion-schemes-5.0.2.1-7kpGuWO4IfmBYP5FH22c9LData.Functor.BaseData.Functor.FoldableData.Functor.Foldable.TH Data.ListNonEmpty NonEmptyFheadtail$fBitraversableNonEmptyF$fBifoldableNonEmptyF$fBifunctorNonEmptyF$fTraversableNonEmptyF$fFoldableNonEmptyF$fFunctorNonEmptyF$fRead1NonEmptyF$fRead2NonEmptyF$fShow2NonEmptyF$fShow1NonEmptyF$fOrd1NonEmptyF$fOrd2NonEmptyF$fEq1NonEmptyF$fEq2NonEmptyF $fEqNonEmptyF$fOrdNonEmptyF$fShowNonEmptyF$fReadNonEmptyF$fGenericNonEmptyF$fGeneric1NonEmptyFNuMuFixListFNilCons Corecursiveembedanaapopostprogpostpro RecursiveprojectcataparapreproBasehylounfixrefixzygomutumcatamhistoelgotcoelgot$fCorecursiveEither$fRecursiveEither$fCorecursiveMaybe$fRecursiveMaybe$fCorecursiveNatural$fRecursiveNatural$fCorecursiveNonEmpty$fRecursiveNonEmpty$fCorecursive[] $fRecursive[]$fBitraversableListF$fBifoldableListF$fBifunctorListF$fTraversableListF$fFoldableListF$fFunctorListF $fRead1ListF $fRead2ListF $fShow2ListF $fShow1ListF $fOrd1ListF $fOrd2ListF $fEq1ListF $fEq2ListF$fCorecursiveFix$fRecursiveFix $fReadFix $fShowFix$fOrdFix$fEqFix$fReadMu$fShowMu$fOrdMu$fEqMu$fCorecursiveMu $fRecursiveMu$fReadNu$fShowNu$fOrdNu$fEqNu $fRecursiveNu$fCorecursiveNu $fEqListF $fOrdListF $fShowListF $fReadListF$fGenericListF$fGeneric1ListF $fDataFix BaseRulesmakeBaseFunctormakeBaseFunctorWith baseRules baseRulesType baseRulesConbaseRulesFieldlambekcolambek _readListWithbaseGHC.BaseFunctor Data.FoldableFoldableData.Traversable Traversable mkMorphismtypeVarsconAppsT substType_baseRulesType _baseRulesCon_baseRulesField