yZ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXY(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 Z      (c) Fumiaki Kinoshita 2017BSD3'Fumiaki Kinoshita <fumiexcel@gmail.com> Trustworthy%&*+,/09:;<=?DOQRT[[Ideally, it will be 'Map Succ'#The successor of the number$Converts type naturals into \.&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 membership1[#$%&'()*+,-./]0123456789:;<^_=`>?@ABCDEFGHIJKLMN6abcdefghijklmnopqr#$%&'()*+,-./0123456789:;<=>?@ABCDEF%=>>?ABCD;<@-+9:867012345./EF&'()$%#,*#[#$%&'()*+,-./]0123456789:;<^_=`>?@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[\]^_`abcdsefgh!+-0123456789:;<=?@VWXYZ[\]^_`abcd!^_`abcd=?;<@-+Z[\]WXYV9:867012345VWXYZ[\]^_`abcdsefgh(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.m Create a new j using the supplied initializer.n Create a j full of the specified value.o Create a new j/ using the supplied initializer with a context.p Create a new j from an HList.qTurn j) into an immutable product. The original j may not be used.r Create a new j from a product.sThe size of a product.t$Right-associative fold of a product.uConvert a product into an HList.v Create a new j! using the contents of a product.wGet an element in a product.xCreate a product from an t action which returns a j.iujvklmwnoxpqrsytuvwxyijklmnopqrstuvwxjklmnopiqvwstrxuiujvklmwnoxpqrsytuvwxy(c) Fumiaki Kinoshita 2017BSD3'Fumiaki Kinoshita <fumiexcel@gmail.com>Safe%&*+,/09:;<=DOQRTbzThe 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. z{|}~ z{|}~ z{|}~ z{|}~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 .An empty product.Convert  into a product.Flipped w-Map a function to every element of a product.;Transform every element in a product, preserving the order.  z "a z  (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.<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 =  zGroup sums by type.$WXYZ[\]istuw$istwZ[\]uWXY0 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 . Shows in field @= value" style instead of the derived one.111(c) Fumiaki Kinoshita 2017BSD3'Fumiaki Kinoshita <fumiexcel@gmail.com>None%&*+,09:;DOQRT,Throwing 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. jrunStateEff = peelEff rebindEff1 (a s -> return (a, s)) (m k s -> let (a, s') = runState m s in k a s') *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.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.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 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 .1Re-bind an unrelated actionreturn the result%Handle the foremost type of an actionRe-bind an unrelated actionreturn the resultHandle the foremost action     3     3     ,     1(c) Fumiaki Kinoshita 2017BSD3'Fumiaki Kinoshita <fumiexcel@gmail.com>None%&*+,09:;<=DOQRT !"#$%&'()  !"  !" !"#$%&'()(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 Maybe/ Apply a function to its content.0The inverse of .1A product filled with , 2,Extend a product and fill missing fields by Null.3)Narrow the range of the sum, if possible. ,-./012345,-./01231023,-./,-./012345(c) Fumiaki Kinoshita 2017BSD3'Fumiaki Kinoshita <fumiexcel@gmail.com> Trustworthy%&*+,09:;DOQRT[9Alias for plain sums:Alias for plain products;O(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.9:;<=>?9:;<=>?:9;<=>?9:;<=>?;5>1(c) Fumiaki Kinoshita 2017BSD3'Fumiaki Kinoshita <fumiexcel@gmail.com>None%&*+,029:;DOQRT[@3The class of types that can be converted to/from a .DConvert a value into a .E Convert a  to a value.F 5record :: IsRecord a => Iso' a (Record (RecFields a))G Create an @* instance for a normal record declaration. @ABCDEFGH@ABCDEFG@ABCDEFG @ABCDEFGH(c) Fumiaki Kinoshita 2017BSD3'Fumiaki Kinoshita <fumiexcel@gmail.com> Trustworthy$%&*+,09:;DOQRT[IGenerate fields using d. I "foo Bar" defines: Rfoo :: FieldOptic "foo" foo = itemAssoc (Proxy :: Proxy "foo") _Bar :: FieldOptic Bar" _Bar = itemAssoc (Proxy :: Proxy Bar) J/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)) KWInstead of making a type synonym for individual actions, it defines a list of actions.LKGenerates type synonyms for the set of actions and also individual actions.IJKLM(generate a synonym of the set of actions(generate synonyms for individual actionsIJKLMIJKLMIJKLM(c) Fumiaki Kinoshita 2017BSD3'Fumiaki Kinoshita <fumiexcel@gmail.com>None%&*+,09:;DIOQRTNN h xs mA is the monad of computations that may depend on the elements in xs.Q#Hitch an element associated to the  through a wrapper.R6Take a value from the tangles. The result is memoized.SRun a N8 action and return the result and the calculated values.TRun a N action.U-Run tangles and collect all the results as a . NOPQRS tangle matrixpre-calculated valuesT tangle matrixpre-calculated valuesU tangle matrixpre-calculated valuesVNOPQRSTU NOPVQRSTUNOPQRSTUV(c) Fumiaki Kinoshita 2017BSD3'Fumiaki Kinoshita <fumiexcel@gmail.com>None%&*+,09:;DOQRT +-0123456789:;<=?@VWXYZ[\]^_`abcdistuwz{|}~     *,-./01239:;<=>?@ABCDEFGIJKLMNOPQRSTU !"#$%&''())*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ml j k                             !"#$%&'()*+,-./0123456789:;<<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]]^_`abcdefghijklmnooVklpqrqsqtquqvqwqxqyqzq{q|q}~~~~~hh  hh%extensible-0.4-9BzsDFaEjIiJvshuQNPUXWData.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[]:*Structsetgetnew newRepeatnewFor newFromHList unsafeFreezethawtoHListnewFromhlookuphfrozen$fExtensiblekfp:*:|EmbedAthoistembedstrikestrikeAt<:|exhaust embedAssoc$fExtensiblekfp:| $fBounded:|$fEnum:|<:nil fromHListhindex hmapWithIndexhmaphzipWith hzipWith3hfoldMaphfoldMapWithIndex hsequencehcollect hdistributehrepeat htabulate hgenerate htabulateFor hrepeatFor hgenerateFor haccumMaphaccum hpartition Instance1 WrapForalllibrary$fInstance1kkchx$fOrd:|$fEq:|$fShow:| $fMonoid:*$fOrd:*$fEq:*$fShow:* IncludeAssoc AssociatedInclude⊆ inclusionshrinkspreadinclusionAssoc shrinkAssoc spreadAssoc$fAssociatedkvxstMatchrunMatch matchWithmapMatchmatchcaseOf$fWrapperkMatch LabelPhantom Labelling FieldName Inextensible FieldOpticVariantRecord VariantOfRecordOfFieldgetFieldKeyValue AssocValueAssocKey proxyAssocKey liftField liftField2 emptyRecordmatchWithField matchField@=<@=>@:>$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 InstructionliftEffliftsEffhoistEffpeelEff rebindEff0 rebindEff1 rebindEff2leaveEff retractEff handleEff runAction@!? peelActionaskEffasksEfflocalEff runReaderEffgetEffgetsEffputEff modifyEffstateEff runStateEff writerEfftellEff listenEffpassEff runWriterEff runMaybeEffthrowEffcatchEff runEitherEfftickEff runIterEff EitherDefMaybeDef WriterDefStateDef ReaderDef runReaderDef runStateDef runWriterDef runMaybeDef runEitherDef$fMonadPlusSkeleton$fAlternativeSkeleton$fMonadErroreSkeleton$fMonadWriterwSkeleton$fMonadStatesSkeleton$fMonadReaderrSkeleton$fMonadIOSkeleton訊$fIsLabelkProxyNullable getNullable mapNullable coinclusionvacancywrenchretrench$fMonoidNullable$fWrapperkNullable$fShowNullable $fEqNullable $fOrdNullableOneOfAllOf<%pluckbury<%| accessingIsRecord RecFieldsrecordFromList recordToListtoRecord fromRecordrecordderiveIsRecord $fIsRecord()mkField decEffects decEffectSetdecEffectSuitecustomDecEffectsTangleT unTangleTlassohitchAt runTangleT evalTangleT runTangles$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 symbolValMonadpReaderpStatepWriterpEitherNothingtvName shape2Pat shape2Expcon2EfffromMangledGADTvarsT effectFunD effectFunT uniqueNames typeListT associateT effClause