x      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{| } ~  (c) Fumiaki Kinoshita 2015BSD3'Fumiaki Kinoshita <fumiexcel@gmail.com> experimentalportable Trustworthy!"&'(+345>IKLN  :: 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!"&'(*+34579>IKLNU 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.0PRIVILEGED: Navigate a tree.1The ( points the first element2The next membership3Describes the relation of ( within a tree4Describes the relation of ( within a tree9  !"#$%&'()*+,-./01234=  !"#$%&'()*+,-./01234-())*,-./&'+$%"# !01234  +  !"#$%&'()*+,-./01234 %(c) Fumiaki Kinoshita 2015BSD3'Fumiaki Kinoshita <fumiexcel@gmail.com> experimental non-portableSafe!"&'(+-./345>IKLN5Poly-kinded Const8Poly-kinded composition;&The extensible data types should take k -> *T as a parameter. This class allows us to take a shortcut for direct representation.<< h v! is the actual representation of h v.=This is an isomorphism between h v and < h v. !_Wrapper :: Iso' (h v) (Repr h v)>Restricted version of =.. It is useful for eliminating ambiguousness.56789:;<=>? 56789:;<=>? ;<=>56789:? 56789:;<=>?(c) Fumiaki Kinoshita 2015BSD3'Fumiaki Kinoshita <fumiexcel@gmail.com> experimentalMPTCsSafe!"&'(+3457>IKLN@This class allows us to use A for both sums and products.BAccessor for an element.CLike B%, but reckon membership from its key.@ABCDEF !"#$%&'(*+@ABCDEF@ABCDEF(*&'+$%"# !@ABCDEF(c) Fumiaki Kinoshita 2015BSD3'Fumiaki Kinoshita <fumiexcel@gmail.com> experimental non-portable Trustworthy!"&'(*+3457>IKLNG4Guarantees the all elements satisfies the predicate.HO(n) Analogous to J!, but it also supplies a context c x for every elements in xs.ISGiven a function that maps types to values, we can "collect" entities all you want.JO(n), Generate a product with the given function.K The type of extensible products. (:*) :: (k -> *) -> [k] -> *NO(1) Extract the head element.OO(log n)! Extract the tail of the product.P)Split a product to the head and the tail.QAn alias for (R).RO(log n) Add an element to a product.S<Transform every elements in a product, preserving the order. S  "a  S (f . g) "a S f . S g T<Transform every elements in a product, preserving the order.UCombine products.V for heterogeneous productW for heterogeneous productX1Map elements to a monoid and combine the results. X f . S g "a X (f . g)Y<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 Z analog for extensible products[ The dual of Y\ The dual of Z]O(log n) Pick up an elemtnt.^Flipped ]_S with (s.`Y with (s.aThe legacy name for AbThe legacy name for BcPure version of J. S f (c g) "a c (f . g) c (^ m) "a m ^ (c k) "a k dPure version of H.GHC can't prove this%GHIJKLMNOPQRSTUVWXYZ[\]^_`abcdGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdKLMRQUNOPS_TVWXY`Z[\]^abIJcGHd!GHIJKLMNOPQRSTUVWXYZ[\]^_`abcdQRU(c) Fumiaki Kinoshita 2015BSD3'Fumiaki Kinoshita <fumiexcel@gmail.com> experimental non-portableSafe!"&'(*+3457>IKLNZ eThe extensible sum type (:|) :: (k -> *) -> [k] -> *gChange the wrapper.hO(1) lift a value.i"Try to extract something you want.j"Try to extract something you want.kO(1) Naive pattern matchlThere is no empty union.m&Embed a value, but focuses on its key.n3A traversal that tries to point a specific element. efghijklmn efghijklmn efghijklnm efghijklmnkSafe!"&'(+3457>IKLNo%Composition for a class and a wrapperpForall upon a wrapperq0Reify a collection of dictionaries, as you wish.opqopqqpo opq(c) Fumiaki Kinoshita 2015BSD3'Fumiaki Kinoshita <fumiexcel@gmail.com> experimental non-portableSafe!"&'(+3457>IKLN r Similar to t, but this focuses on keys.tys contains xsuUnicode alias for tv'Reify the inclusion of type level sets.w O(m log n) Select some elements.xO(log n) Embed to a larger union.y'Reify the inclusion of type level sets.z O(m log n) Select some elements.{O(log n) Embed to a larger union. rstuvwxyz{ rstuvwxyz{ utvwxrsyz{ rstuvwxyz{ (c) Fumiaki Kinoshita 2015BSD3'Fumiaki Kinoshita <fumiexcel@gmail.com> experimental non-portableSafe!"&'(+345>IKLN|)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 |.O(log n) Perform pattern matching.Flipped |}~|}~|}~|}~ (c) Fumiaki Kinoshita 2015BSD3'Fumiaki Kinoshita <fumiexcel@gmail.com> experimental non-portableSafe!"&'(+3457>IKLN*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 annotated with the field name k.  :: (v -> *) -> Assoc k v -> *Take the type of the valueTake the type of the key Proxy-level . This is useful when using . An empty .*Select a corresponding field of a variant.#Annotate a value by the field name.Lifted ()+Annotate a value by the field name without ;. Shows in field @= value" style instead of the derived one. Safe!"&'(+3457>IKLN The extensible operational monadA unit of effectsTransformation between effectsUnnamed actionLift some effect to   = ( )  None!"&'(+-345>IKLNU3The class of types that can be converted to/from a .            (c) Fumiaki Kinoshita 2015BSD3'Fumiaki Kinoshita <fumiexcel@gmail.com> experimental non-portableSafe!"&'(+345>IKLNUPoly-kinded Maybe Apply a function to its content.The inverse of v.,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!"&'(+345>IKLNUAlias 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 !"&'(+345>IKLNUGenerate fields using F.  "foo Bar" defines: Rfoo :: FieldOptic "foo" foo = itemAssoc (Proxy :: Proxy "foo") _Bar :: FieldOptic Bar" _Bar = itemAssoc (Proxy :: Proxy Bar) /Generate named effects from a GADT declaration.(c) Fumiaki Kinoshita 2015BSD3'Fumiaki Kinoshita <fumiexcel@gmail.com> experimental non-portableNone!"&'(+345>IKLN !"#$%&'(*+56789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEEFGGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                              8                   exten_4r1GqW5QH59A1AgbFsMncgData.Extensible.Internal.RigData.Extensible.InternalData.Extensible.WrapperData.Extensible.ClassData.Extensible.ProductData.Extensible.SumData.Extensible.DictionaryData.Extensible.InclusionData.Extensible.MatchData.Extensible.FieldData.Extensible.EffectData.Extensible.RecordData.Extensible.NullableData.Extensible.PlainData.Extensible.THData.ExtensibleExchangeOptic'OpticviewviewsoverwithIsoreviewMergeConcat++MapSucc KnownPositiontheIntNatZeroDNatSDNatLastTailHalfFindTypeHead∈NavHereHere FindAssoc Elaborate Elaborated ExpectingMissing Duplicate Associate associationAssoc:>Member membership Membership getMemberId mkMembershiprememberreifyMembership runMembershipcompareMembershipimpossibleMembershipnavigateherenavNextnavLnavRConst' getConst'CompgetCompWrapperRepr_Wrapper _WrapperAscomp ExtensiblepieceAtpiece pieceAssocitemAtitem itemAssocForall hgenerateForGenerate hgenerate:*NilTreehheadhtailhuncons<:*<:hmaphtrans*++*hzipWith hzipWith3hfoldMap htraverse hsequencehcollect hdistributehlookuphindex hmapWithIndexhtraverseWithIndexsectorAtsector htabulate htabulateFor:|EmbedAthoistembedstrikestrikeAt<:|exhaust embedAssocpicked Instance1 WrapForalllibrary IncludeAssoc AssociatedInclude⊆ inclusionshrinkspreadinclusionAssoc shrinkAssoc spreadAssocMatchrunMatch matchWithmapMatchmatchcaseOf LabelPhantom Labelling FieldName Inextensible FieldOpticVariantRecord VariantOfRecordOfFieldgetFieldKeyValue AssocValueAssocKey proxyAssocKey emptyRecordmatchWithField matchField@=<@=>@:>Eff InstructionHandler runHandlerFunctionActionAResult AArgumentreceiveliftEffhoistEff handleWith!-!!nihilitysquashIsRecord RecFields fromRecordtoRecordderiveIsRecordNullable getNullable mapNullable coinclusionwrenchretrenchOneOfAllOf<%pluckbury<%| accessingmkField decEffects$fProfunctorExchangeMapSuccghc-prim GHC.TypesWord MapSuccKey Remembrance$fKnownPositionNatSDNat$fKnownPositionNatDNat$fKnownPositionNatZero$fOrdMembership$fEqMembership$fShowMembership$fAssociatekkkvxs $fMemberkxsxbase Data.Proxy asProxyTypeOfProxyKProxyData.Type.Equalityouterinnerapply gcastWithcastWithtranssymRefl:~: testEquality TestEquality==$fWrapperkProxy$fWrapperkConst'$fWrapperkComp$fWrapper*IdentityproxyKeyGHC.BaseidGHC.ListzipWithzipWith3Data.Traversablesequence lemmaHalfTailpieceAt_ $fForallkc: $fForallkc[] $fGeneratek: $fGeneratek[]$fExtensiblekf(->):*$fExtensiblekfp:| $fBounded:|$fEnum:| MergeList getMerged$fInstance1kkchx$fOrd:|$fEq:|$fShow:| $fMonoid:*$fOrd:*$fEq:*$fShow:*$fMonoidMergeListgetAssociation$fAssociatedAssocxs:>$fWrapperkMatch GHC.TypeLits symbolVal $fShowField$fProfunctorLabelPhantom$fExtensiblekfpInextensible $fMonoidField$fWrapperAssocField$fKeyValuekkpkpv:>ShapeSNilSTreetvName shape2Pat shape2Exp consShape$fWrapperkNullable