m      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijkl(c) Fumiaki Kinoshita 2017BSD3'Fumiaki Kinoshita <fumiexcel@gmail.com> Trustworthy%&*+,09:;DOQRT  :: Getter s a -> s -> a & :: Getter s a -> (a -> r) -> (s -> r) * :: Setter s t a b -> (a -> b) -> (s -> t)      (c) Fumiaki Kinoshita 2017BSD3'Fumiaki Kinoshita <fumiexcel@gmail.com>Safe%&*+,02349:;DOQRT Poly-kinded ConstPoly-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.Wrap a result of m      (c) Fumiaki Kinoshita 2017BSD3'Fumiaki Kinoshita <fumiexcel@gmail.com> Trustworthy%&*+,/09:;<=?DOQRT[nIdeally, it will be 'Map Succ'#The successor of the number$Converts type naturals into o.&Type level binary number+FindType types-Unicode flipped alias for ;.!Ensure that the first element of xs is x2A readable type search result66 k v xs is essentially identical to  (k :> v) " xs , but the type v is inferred from k and xs.8A synonym for (:)9The kind of key-value pairs;x is a member of xs=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 =.B/Embodies a type equivalence to ensure that the = points the first element.C Compare two =s.D There is no = of an empty list.EThe = points the first elementFThe next membership1n#$%&'()*+,-./p0123456789:;<qr=s>?@ABCDEFGHIJKLMN6tuvwxyz{|}~#$%&'()*+,-./0123456789:;<=>?@ABCDEF%=>>?ABCD;<@-+9:867012345./EF&'()$%#,*#n#$%&'()*+,-./p0123456789:;<qr=s>?@ABCDEFGHIJKLMN:0(c) Fumiaki Kinoshita 2017BSD3'Fumiaki Kinoshita <fumiexcel@gmail.com> Trustworthy%&*+,09:;DOQRTOPQRSTUOPQRSTUOPQRSTUOPQRSTUQ5(c) Fumiaki Kinoshita 2017BSD3'Fumiaki Kinoshita <fumiexcel@gmail.com>Safe%&*+,09:;<=DOQRT WEvery element in xs satisfies cXEnumerate all possible =s of xs with an additional context.Z(Every type-level list is an instance of Z.[Enumerate all possible =s of xs.\ Count the number of memberships.] Enumerate =s and construct an O.^This class allows us to use _ for both sums and products.`Accessor for an element.aLike `%, but reckon membership from its key.b-Access a specified element through a wrapper.c$Access an element through a wrapper.d>Access an element specified by the key type through a wrapper.VWXYZ[\]^_`abcdefgh!+-0123456789:;<=?@VWXYZ[\]^_`abcd!^_`abcd=?;<@-+Z[\]WXYV9:867012345VWXYZ[\]^_`abcdefgh(c) Fumiaki Kinoshita 2017BSD3'Fumiaki Kinoshita <fumiexcel@gmail.com>None$%&*+,09:;<=BDOQRTi The type of extensible products. (:*) :: (k -> *) -> [k] -> *jMutable type-indexed struct.kWrite a value in a j.lRead a value from a j.q Create a new j using the supplied initializer.r Create a j full of the specified value.s Create a new j/ using the supplied initializer with a context.t Create a new j from an HList.uTurn j) into an immutable product. The original j may not be used.v Create a new j from a product.wThe size of a product.x$Right-associative fold of a product.yConvert a product into an HList.z Create a new j! using the contents of a product.{Get an element in a product.|Create a product from an  action which returns a j.ijklmnopqrstuvwxyz{|}~ijklmnopqrstuvwxyz{|}jklqrstmnopiuz{wxv|}yijklmnopqrstuvwxyz{|}~(c) Fumiaki Kinoshita 2017BSD3'Fumiaki Kinoshita <fumiexcel@gmail.com>Safe%&*+,/09:;<=DOQRTbThe extensible sum type (:|) :: (k -> *) -> [k] -> *Change the wrapper.O(1) lift a value."Try to extract something you want."Try to extract something you want.O(1) Naive pattern matchThere is no empty union.&Embed a value, but focuses on its key.    1 (c) Fumiaki Kinoshita 2017BSD3'Fumiaki Kinoshita <fumiexcel@gmail.com> Trustworthy$%&*+,/09:;<=DOQRT:O(n) Prepend an element onto a product. Expressions like a <: b <: c <: nil are transformed to a single .Strict version of ().An empty product.Convert  into a product.Flipped {-Map a function to every element of a product.;Transform every element in a product, preserving the order.   "a   (f . g) "a  f .  g  for heterogeneous product for heterogeneous product1Map elements to a monoid and combine the results.  f .  g "a  (f . g)! with the membership of elements.x$ with a constraint for each element.$ with a constraint for each element.<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  analog for extensible products The dual of  The dual of  with =s.*A product filled with the specified value.3Construct a product using a function which takes a =.  f ( g) "a  (f . g)  ( m) "a m  ( k) "a k  version of .Pure version of .*A product filled with the specified value. version of .Accumulate sums on a product.  haccum =  Group sums by type.$Evaluate every element in a product.)WXYZ[\]iwxy{)iwx{Z[\]yWXY00 Safe%&*+,09:;<=DOQRT%Composition for a class and a wrapperForall upon a wrapper0Reify a collection of dictionaries, as you wish.  (c) Fumiaki Kinoshita 2017BSD3'Fumiaki Kinoshita <fumiexcel@gmail.com>Safe%&*+,09:;<=DOQRT  Similar to , but this focuses on keys. xs (k ':> v) is equivalent to 6 k v xsys contains xsUnicode alias for 'Reify the inclusion of type level sets.O(n) Select some elements.O(1) Embed to a larger union.'Reify the inclusion of type level sets.O(n) Select some elements.O(1) Embed to a larger union.   (c) Fumiaki Kinoshita 2017BSD3'Fumiaki Kinoshita <fumiexcel@gmail.com>Safe%&*+,09:;DOQRT)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(1) Perform pattern matching.Flipped 0 (c) Fumiaki Kinoshita 2017BSD3'Fumiaki Kinoshita <fumiexcel@gmail.com>None%&*+,/09:;<=DIOQRT*A ghostly type which spells the field name!Signifies a field name internally4When 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 -> *Combined constraint for 9Take the type of the valueTake the type of the key Proxy-level . This is useful when using . Lift a function for the content. Lift a function for the content. An empty .*Select a corresponding field of a variant.Pattern matching on a #Annotate a value by the field name.Lifted ()+Annotate a value by the field name without .'Kind-monomorphic, unwrapped version of ('=')@ Shows in field @= value" style instead of the derived one.1111(c) Fumiaki Kinoshita 2017BSD3'Fumiaki Kinoshita <fumiexcel@gmail.com>None%&*+,09:;DOQRT0Throwing an exceptionAn effect with no result(,) already is a writer monad.fThe reader monad is characterised by a type equality between the result type and the enviroment type. [a, b, c] r is a -> b -> c -> r)Anonymous representation of instructions.Transformation between effectsA function to bind an  in . The extensible operational monadA unit of named effects.Lift an instruction onto an  action.Lift an instruction onto an + action and apply a function to the result./Censor a specific type of effects in an action.7Build a relay-style handler from a triple of functions. `runStateEff = peelEff1 (a s -> return (a, s)) (m k s -> let (a, s') = runState m s in k a s') ( specialised for 1-argument continuation *A common value for the second argument of !. Binds an instruction directly. /A pre-defined value for the second argument of .. Preserves the argument of the continuation. /A pre-defined value for the second argument of /. Preserves two arguments of the continuation. Reveal the final result of . Tear down an action using the  instance of the instruction. Process an  action using a record of s.Pass the arguments of  to the supplied function. Create a  of a  for an .Specialised version of  for s. You can pass a function a -> b -> ... -> (q -> r) -> r as a handler for  '[a, b, ...] q.$Non continuation-passing variant of .Fetch the environment.#Pass the environment to a function.Modify the enviroment locally.Run the frontal reader effect.Get the current state.%Pass the current state to a function.#Replace the state with a new value.Modify the state.#Lift a state modification function.Run the frontal state effect.Run the frontal state effect.6Write the second element and return the first element.Write a value. /Squash the outputs into one step and return it.!3Modify the output using the function in the result."Run the frontal writer effect.#Run the frontal state effect.$,Run an effect which may fail in the name of k.%Throw an exception e,, throwing the rest of the computation away.&"Attach a handler for an exception.'Run the frontal Either effect.(!Put a milestone on a computation.)Run a computation until (.7Re-bind an unrelated actionreturn the result%Handle the foremost type of an actionreturn the result%Handle the foremost type of an action     Re-bind an unrelated actionreturn the resultHandle the foremost actionHandle the foremost action !"#$%&'()7      !"#$%&'()7      !"#$%&'()2      !"#$%&'()1(c) Fumiaki Kinoshita 2017BSD3'Fumiaki Kinoshita <fumiexcel@gmail.com>None%&*+,09:;<=DOQRT*+,-./0123456789: *+,-./0123 ./-0,1+2*3*+,-./0123456789:(c) Fumiaki Kinoshita 2017BSD3'Fumiaki Kinoshita <fumiexcel@gmail.com>None%&*+,09:;<=DOQRT;Specialised version of d.;<=;=;<;<=(c) Fumiaki Kinoshita 2017BSD3'Fumiaki Kinoshita <fumiexcel@gmail.com>None%&*+,09:;DOQRT[> Wrapped MaybeA Apply a function to its content.BThe inverse of .CA product filled with > D,Extend a product and fill missing fields by Null.E)Narrow the range of the sum, if possible. >?@ABCDEFG>?@ABCDECBDE>?@A>?@ABCDEFG(c) Fumiaki Kinoshita 2017BSD3'Fumiaki Kinoshita <fumiexcel@gmail.com> Trustworthy%&*+,09:;DOQRT[KAlias for plain sumsLAlias for plain productsMO(log n) Add a plain value to a product.NExtract a plain value.OEmbed a plain value.P)Naive pattern matching for a plain value.Q%An accessor for newtype constructors.KLMNOPQKLMNOPQLKMNOPQKLMNOPQM5P1(c) Fumiaki Kinoshita 2017BSD3'Fumiaki Kinoshita <fumiexcel@gmail.com>None%&*+,029:;DOQRT[R3The class of types that can be converted to/from a .VConvert a value into a .W Convert a  to a value.X 5record :: IsRecord a => Iso' a (Record (RecFields a))Y Create an R* instance for a normal record declaration. RSTUVWXYZRSTUVWXYRSTUVWXY RSTUVWXYZ(c) Fumiaki Kinoshita 2017BSD3'Fumiaki Kinoshita <fumiexcel@gmail.com> Trustworthy$%&*+,09:;DOQRT[[Generate fields using d. [ "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. LdecEffects [d| data Blah a b x where Blah :: Int -> a -> Blah a b b |]  generates type Blah a b = "Blah" >: Action '[Int, a] b blah :: forall xs a b . Associate "Blah" (Action '[Int, a] b) xs => Int -> a -> Eff xs b blah a0 a1 = liftEff (Data.Proxy.Proxy :: Data.Proxy.Proxy "Blah") (AArgument a0 (AArgument a1 AResult)) ]WInstead of making a type synonym for individual actions, it defines a list of actions.^KGenerates type synonyms for the set of actions and also individual actions.[\]^_(generate a synonym of the set of actions(generate synonyms for individual actions[\]^_[\]^_[\]^_(c) Fumiaki Kinoshita 2017BSD3'Fumiaki Kinoshita <fumiexcel@gmail.com>None%&*+,09:;DIOQRT`` h xs mA is the monad of computations that may depend on the elements in xs.c#Hitch an element associated to the  through a wrapper.d6Take a value from the tangles. The result is memoized.eRun a `8 action and return the result and the calculated values.fRun a ` action.g-Run tangles and collect all the results as a . `abcde tangle matrixpre-calculated valuesf tangle matrixpre-calculated valuesg tangle matrixpre-calculated valueshi`abcdefg `abihcdefg`abcdefghi(c) Fumiaki Kinoshita 2017BSD3'Fumiaki Kinoshita <fumiexcel@gmail.com>None%&*+,09:;DOQRT +-0123456789:;<=?@VWXYZ[\]^_`abcdiwxy{      !"#$%&'();>?@ABCDEKLMNOPQRSTUVWXY[\]^_`abcdefg !"#$%&''())*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ml j k                                   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNNOPQRSTUVWXYZ[\]^_`abcdefghijklmnoopqrstuvwxyz{|}~V~{{  {{'extensible-0.4.2-BLSRe4d1UrBJElt6jDRi1nData.Extensible.EffectData.Extensible.Internal.RigData.Extensible.WrapperData.Extensible.InternalData.Extensible.HListData.Extensible.ClassData.Extensible.StructData.Extensible.SumData.Extensible.ProductData.Extensible.DictionaryData.Extensible.InclusionData.Extensible.MatchData.Extensible.FieldData.Extensible.Effect.DefaultData.Extensible.LabelData.Extensible.NullableData.Extensible.PlainData.Extensible.RecordData.Extensible.THData.Extensible.TangleLHListData.ExtensiblebaseData.Functor.IdentityIdentitytransformers-0.5.2.0 Control.Monad.Trans.State.StrictStateExchangeOptic'OpticviewviewsoverwithIsoreview$fProfunctorExchangeConst' getConst'CompgetCompWrapperRepr_Wrapper _WrapperAscomp$fWrapperkProxy$fWrapperkConst'$fWrapperkComp$fWrapperTYPE[]$fWrapperTYPEMaybe$fWrapperTYPEIdentity $fShowComp$fEqComp $fOrdComp $fShowConst' $fEqConst' $fOrdConst'Succ KnownPositiontheIntNatZeroDNatSDNatLastFindTypeHead∈NavHereHere FindAssoc Elaborate Elaborated ExpectingMissing Duplicate Associate association>:Assoc:>Member membership Membership getMemberId mkMembershiprememberreifyMembership runMembershipcompareMembershipimpossibleMembershipherenavNext$fKnownPositionNatSDNat$fKnownPositionNatDNat$fKnownPositionNatZero$fOrdMembership$fEqMembership$fShowMembership$fAssociatevkkvxs $fMemberkxsxHNilHCons htraversehtraverseWithIndexhfoldrWithIndexhlengthForallFForall henumerateForhgenerateListForGenerate henumeratehcount hgenerateList ExtensiblepieceAtpiece pieceAssocitemAtitem itemAssoc $fForallac: $fForallkc[] $fGeneratek: $fGeneratek[]:*Structsetget atomicModify atomicModify' atomicModify_atomicModify'_new newRepeatnewFor newFromHList unsafeFreezethawtoHListnewFromhlookuphfrozenhmodify$fExtensiblekfp:*:|EmbedAthoistembedstrikestrikeAt<:|exhaust embedAssoc$fExtensiblekfp:| $fBounded:|$fEnum:|<:@:>@==$fProfunctorLabelPhantom$fExtensiblekfpInextensible $fShowField$fWrapperAssocField$fKeyValuevkpkpv:> $fNFDataField$fBoundedField $fEnumField $fMonoidField$fStorableField$fSemigroupField$fRealFracField$fRealFloatField $fRealField$fFloatingField$fFractionalField$fIntegralField $fNumField $fOrdField $fEqField EitherEffMaybeEff WriterEff ReaderEffFunctionActionAResult AArgument InterpreterrunInterpreterRebinderEff InstructionliftEffliftsEffhoistEffpeelEffpeelEff1 rebindEff0 rebindEff1 rebindEff2leaveEff retractEff handleEff runAction@!? peelAction peelAction0askEffasksEfflocalEff runReaderEffgetEffgetsEffputEff modifyEffstateEff runStateEff execStateEff writerEfftellEff listenEffpassEff runWriterEff execWriterEff runMaybeEffthrowEffcatchEff runEitherEfftickEff runIterEff EitherDefMaybeDef WriterDefStateDef ReaderDef runReaderDef runStateDef runWriterDef runMaybeDef runEitherDef$fMonadPlusSkeleton$fAlternativeSkeleton$fMonadErroreSkeleton$fMonadWriterwSkeleton$fMonadStatesSkeleton$fMonadReaderrSkeleton$fMonadIOSkeleton訊$fIsLabelk(->)$fIsLabelkProxyNullable getNullable mapNullable coinclusionvacancywrenchretrench$fMonoidNullable$fWrapperkNullable$fShowNullable $fEqNullable $fOrdNullableOneOfAllOf<%pluckbury<%| accessingIsRecord RecFieldsrecordFromList recordToListtoRecord fromRecordrecordderiveIsRecord $fIsRecord()mkField decEffects decEffectSetdecEffectSuitecustomDecEffectsTangleT unTangleTlassohitchAt runTangleT evalTangleT runTangles$fMonoidTangleT$fMonadTransTangleT$fFunctorTangleT$fApplicativeTangleT$fMonadTangleTGHC.BasefmapMapSuccghc-prim GHC.TypesWord MapSuccKey Remembrance~~Data.Type.Equalityouterinnerapply gcastWithcastWithtranssym:~:Refl TestEquality testEquality== Data.Proxy asProxyTypeOfProxyKProxyproxyKeyGHC.STSTHProductnewDict newForDictunsafeMembershipidGHC.ListzipWithzipWith3Data.Traversablesequence ApplicativegetAssociation Associated' GHC.TypeLits symbolValMonad contState contWriterpReaderpStatepWriterpEitherNothingtvName shape2Pat shape2Expcon2EfffromMangledGADTvarsT effectFunD effectFunT uniqueNames typeListT associateT effClause