Y      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz { | } ~  (c) Fumiaki Kinoshita 2015BSD3'Fumiaki Kinoshita <fumiexcel@gmail.com> experimentalportable Trustworthy!"&'(+234=HJKM  :: Getter s a -> s -> a & :: Getter s a -> (a -> r) -> (s -> r) * :: Setter s t a b -> (a -> b) -> (s -> t)    (c) Fumiaki Kinoshita 2015BSD3'Fumiaki Kinoshita <fumiexcel@gmail.com> experimental non-portable Trustworthy!"&'(*+23468=HJKMT Type level merging Type level concat  Type level ++ Type level mapIdeally, it will be 'Map Succ' The successor of the numberConverts type naturals into .Type level binary numberType-level tailInterleaved listFindType typesUnicode flipped alias for %!Ensure that the first element of xs is x!! k v xs is essentially identical to  (k :> v) " xs , but the type v is inferred from k and xs.#The kind of key-value pairs'The position of x in the type level set xs.) Generates a '2 that corresponds to the given ordinal (0-origin).*Remember that  Member xs x from '.+/Embodies a type equivalence to ensure that the ' points the first element., Compare two 's.-PRIVILEGED: Navigate a tree..The ' points the first element/The next membership0Describes the relation of ' within a tree1Describes the relation of ' within a tree6  !"#$%&'()*+,-./01:  !"#$%&'()*+,-./01*'(()+,%&*#$!" -./01  (  !"#$%&'()*+,-./01 $(c) Fumiaki Kinoshita 2015BSD3'Fumiaki Kinoshita <fumiexcel@gmail.com> experimental non-portable Safe-Inferred!"&'(+-./234=HJKM2Poly-kinded Const5Poly-kinded composition8&The extensible data types should take k -> *T as a parameter. This class allows us to take a shortcut for direct representation.99 h v! is the actual representation of h v.:This is an isomorphism between h v and 9 h v. !_Wrapper :: Iso' (h v) (Repr h v);Restricted version of :.. It is useful for eliminating ambiguousness.23456789:;< 23456789:;< 89:;234567< 23456789:;<(c) Fumiaki Kinoshita 2015BSD3'Fumiaki Kinoshita <fumiexcel@gmail.com> experimentalMPTCs Safe-Inferred!"&'(+2346=HJKM=This class allows us to use > for both sums and products.?Accessor for an element.@Like ?%, but reckon membership from its key.=>?@ABC !"#$%&')*=>?@ABC=>?@ABC')%&*#$!" =>?@ABC(c) Fumiaki Kinoshita 2015BSD3'Fumiaki Kinoshita <fumiexcel@gmail.com> experimental non-portable Trustworthy!"&'(*+2346=HJKMD4Guarantees the all elements satisfies the predicate.EO(n) Analogous to G!, but it also supplies a context c x for every elements in xs.FSGiven a function that maps types to values, we can "collect" entities all you want.GO(n), Generate a product with the given function.H The type of extensible products. (:*) :: (k -> *) -> [k] -> *KO(1) Extract the head element.LO(log n)! Extract the tail of the product.M)Split a product to the head and the tail.NAn alias for (O).OO(log n) Add an element to a product.P<Transform every elements in a product, preserving the order. P  "a  P (f . g) "a P f . P g Q<Transform every elements in a product, preserving the order.RCombine products.S for heterogeneous productT for heterogeneous productU1Map elements to a monoid and combine the results. U f . P g "a U (f . g)V<Traverse all elements and combine the result sequentially.  htraverse (fmap f . g) "a fmap (hmap f) . htraverse g htraverse pure "a pure htraverse (Comp . fmap g . f) "a Comp . fmap (htraverse g) . htraverse f W analog for extensible productsX The dual of VY The dual of WZO(log n) Pick up an elemtnt.[Flipped Z\P with 's.]V with 's.^The legacy name for >_The legacy name for ?`Pure version of G. P f (` g) "a ` (f . g) ` ([ m) "a m [ (` k) "a k aPure version of E.GHC can't prove this%DEFGHIJKLMNOPQRSTUVWXYZ[\]^_`aDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`aHJIONRKLMP\QSTUV]WXYZ[^_FG`DEa!DEFGHJIKLMNOPQRSTUVWXYZ[\]^_`aNOR(c) Fumiaki Kinoshita 2015BSD3'Fumiaki Kinoshita <fumiexcel@gmail.com> experimental non-portable Safe-Inferred!"&'(*+2346=HJKMX bThe extensible sum type (:|) :: (k -> *) -> [k] -> *eChange the wrapper.fO(1) lift a value.g"Try to extract something you want.h"Try to extract something you want.iO(1) Naive pattern matchjThere is no empty union.k&Embed a value, but focuses on its key.l3A traversal that tries to point a specific element. bcdefghijkl bcdefghijkl bcefghijlkd bcdefghijkli Safe-Inferred!"&'(+2346=HJKMm%Composition for a class and a wrappernForall upon a wrappero0Reify a collection of dictionaries, as you wish.mnomnoonm mno(c) Fumiaki Kinoshita 2015BSD3'Fumiaki Kinoshita <fumiexcel@gmail.com> experimental non-portable Safe-Inferred!"&'(+2346=HJKM p Similar to r, but this focuses on keys.rys contains xssUnicode alias for rt'Reify the inclusion of type level sets.u O(m log n) Select some elements.vO(log n) Embed to a larger union.w'Reify the inclusion of type level sets.x O(m log n) Select some elements.yO(log n) Embed to a larger union. pqrstuvwxy pqrstuvwxy srtuvpqwxy pqrstuvwxy (c) Fumiaki Kinoshita 2015BSD3'Fumiaki Kinoshita <fumiexcel@gmail.com> experimental non-portable Safe-Inferred!"&'(+234=HJKMz)Turn a wrapper type into a clause for it.}ORetrieve the contents so that they matches and pass both to the given function.~$Applies a function to the result of z.O(log n) Perform pattern matching.Flipped z{|}~z{|}~}z{|~z{|}~ (c) Fumiaki Kinoshita 2015BSD3'Fumiaki Kinoshita <fumiexcel@gmail.com> experimental non-portableNone!"&'(+2346=HJKM *A ghostly type which spells the field name4When you see this type as an argument, it expects a  FieldLensA. This type is used to resolve the name of the field internally."The trivial inextensible data type FieldOptic s; is a type of optics that points a field/constructor named s.The yielding fields can be  Jhttp://hackage.haskell.org/package/lens/docs/Control-Lens-Lens.html#t:LensLenses for s and  Khttp://hackage.haskell.org/package/lens/docs/Control-Lens-Lens.html#t:PrismPrisms for s. ( "foo" = Associate "foo" a xs => Lens' ( xs) a ) "foo" = Associate "foo" a xs => Prism' ( xs) a s can be generated using mkField defined in the Data.Extensible.TH module.Simple variant Simple record The dual of  )VariantOf :: (v -> *) -> [Assoc k v] -> *1The type of records which contain several fields. (RecordOf :: (v -> *) -> [Assoc k v] -> *A  h (k ':> v) is h v, but is along with the index k.  :: (v -> *) -> Assoc k v -> * An empty .#Annotate a value by the field name.Lifted () Shows in field @= value" style instead of the derived one. None!"&'(+2346=HJKM The extensible operational monadA unit of effectsTransformation between effectsUnnamed actionLift some effect to   (c) Fumiaki Kinoshita 2015BSD3'Fumiaki Kinoshita <fumiexcel@gmail.com> experimental non-portable Safe-Inferred!"&'(+234=HJKMTPoly-kinded Maybe Apply a function to its content.The inverse of t.,Extend a product and fill missing fields by Null.)Narrow the range of the sum, if possible. (c) Fumiaki Kinoshita 2015BSD3'Fumiaki Kinoshita <fumiexcel@gmail.com> experimental non-portable Trustworthy!"&'(+234=HJKMTAlias for plain sumsAlias for plain productsO(log n) Add a plain value to a product.Extract a plain value.Embed a plain value.)Naive pattern matching for a plain value.%An accessor for newtype constructors.(c) Fumiaki Kinoshita 2015BSD3'Fumiaki Kinoshita <fumiexcel@gmail.com> experimental non-portable Trustworthy !"&'(+234=HJKMTGenerate fields using C.  "foo Bar" defines: Rfoo :: FieldOptic "foo" foo = itemAssoc (Proxy :: Proxy "foo") _Bar :: FieldOptic Bar" _Bar = itemAssoc (Proxy :: Proxy Bar) 8Generate newtype wrappers and lenses from type synonyms. decFields [d|type Foo = Int|]  Generates: Tnewtype Foo = Foo Int foo :: (Foo " xs) => Lens' (AllOf xs) Int foo = accessing Foo ! with additional deriving clauses/Generate named effects from a GADT declaration.(c) Fumiaki Kinoshita 2015BSD3'Fumiaki Kinoshita <fumiexcel@gmail.com> experimental non-portable Safe-Inferred!"&'(+234=HJKMTransformation between effectsWrap a type that has a kind * -> *.Add a new transformation.  (c) Fumiaki Kinoshita 2015BSD3'Fumiaki Kinoshita <fumiexcel@gmail.com> experimental non-portableNone!"&'(+234=HJKM !"#$%&')*23456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !"#$%&'()*+,-./0123456789:;<=>?@ABBCDDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                              7       extensible-0.3.5Data.Extensible.Internal.RigData.Extensible.InternalData.Extensible.WrapperData.Extensible.ClassData.Extensible.ProductData.Extensible.SumData.Extensible.DictionaryData.Extensible.InclusionData.Extensible.MatchData.Extensible.FieldData.Extensible.EffectData.Extensible.NullableData.Extensible.PlainData.Extensible.THData.Extensible.UnionData.ExtensibleExchangeOptic'OpticviewviewsoverwithIsoreviewMergeConcat++MapSucc KnownPositiontheIntNatSDNatDNatZeroTailHalfFindTypeHead∈NavHereHere FindAssoc Elaborate Elaborated DuplicateMissing Expecting Associate associationAssoc:>Member membership Membership getMemberId mkMembershipremember runMembershipcompareMembershipnavigateherenavNextnavLnavRConst' getConst'CompgetCompWrapperRepr_Wrapper _WrapperAscomp ExtensiblepieceAtpiece pieceAssocitemAtitem itemAssocForall hgenerateForGenerate hgenerate:*TreeNilhheadhtailhuncons<:*<:hmaphtrans*++*hzipWith hzipWith3hfoldMap htraverse hsequencehcollect hdistributehlookuphindex hmapWithIndexhtraverseWithIndexsectorAtsector htabulate htabulateFor:|EmbedAtUnionAthoistembedstrikestrikeAt<:|exhaust embedAssocpicked Instance1 WrapForalllibrary IncludeAssoc AssociatedInclude⊆ inclusionshrinkspreadinclusionAssoc shrinkAssoc spreadAssocMatchrunMatch matchWithmapMatchmatchcaseOf LabelPhantom Labelling FieldName Inextensible FieldOpticVariantRecord VariantOfRecordOfFieldgetFieldKeyValue AssocValueAssocKey emptyRecordmatchWithField matchField@=<@=>Eff InstructionHandler runHandlerFunctionAction AArgumentAResultreceiveliftEffhoistEff handleWithNullable getNullable mapNullable coinclusionwrenchretrenchOneOfAllOf<%pluckbury<%| accessingmkField decFieldsdecFieldsDeriving decEffectsGondola runGondolaUniongetUnionK1getK1reunionrung runGondolas$fProfunctorExchangeMapSuccghc-prim GHC.TypesWord MapSuccKey Remembrance$fKnownPositionNatSDNat$fKnownPositionNatDNat$fKnownPositionNatZero$fOrdMembership$fEqMembership$fShowMembership$fAssociatekkkvxs $fMemberkxsxbaseData.Type.Equalityouterinnerapply gcastWithcastWithtranssymRefl:~: testEquality TestEquality== Data.Proxy asProxyTypeOfProxyKProxy$fWrapperkProxy$fWrapperkConst'$fWrapperkComp$fWrapper*IdentityproxyKeyGHC.BaseidGHC.ListzipWithzipWith3 Control.Monadsequence lemmaHalfTailpieceAt_ $fForallkc: $fForallkc[] $fGeneratek: $fGeneratek[]$fExtensiblekf(->):*$fExtensiblekfp:| MergeList getMerged$fInstance1kkchx$fOrd:|$fEq:|$fShow:| $fMonoid:*$fOrd:*$fEq:*$fShow:*$fMonoidMergeListgetAssociation$fAssociatedAssocxs:>$fWrapperkMatch $fShowField$fProfunctorLabelPhantom$fExtensiblekfpInextensible$fWrapperAssocField$fKeyValuekkpkpv:>$fWrapperkNullable$fWrapper(->)K1