úÎ!P²LÈ'      !"#$%&Safe&'-.14>DHSUVX_kÕ'()*+,-.None&'-.14>DHSUVX_k ß/polysemy-pluginThings that can be found in a 0 environment.1polysemy-pluginHKD indexed by the  ; used by .polysemy-pluginData kind for 1.polysemy-pluginNAll of the things from "polysemy" that we need access to in the plugin. When l ~ 'Locations0, each of these is just a pair of strings. When  l ~ 'Things(, it's actually references to the stuff.2polysemy-plugin$All of the things we need to lookup. polysemy-pluginLookup all of the .3polysemy-plugin Transform a 1 'Locations into a 1 'Things.   None&'-.14>DHSUVX_k2~ polysemy-plugin4 s don't have 5 or 6‡ instances by default, even though there are functions in GHC that implement these operations. This newtype gives us those instances.polysemy-plugin>A wrapper for two types that we want to say have been unified.polysemy-plugin<The context in which we're attempting to solve a constraint.polysemy-plugin(In the context of a function definition.polysemy-plugin.In the context of running an interpreter. The 7> corresponds to whether we are only trying to solve a single MemberF constraint right now. If so, we *must* produce a unification wanted.polysemy-plugin­Depending on the context in which we're solving a constraint, we may or may not want to force a unification of effects. For example, when defining user code whose type is Member (State Int) r => ... , if we see get :: Sem r s, we should unify s ~ Int.polysemy-pluginDDetermine whether or not two effects are unifiable. This is nuanced.There are several cases: }[W] " e1. e1 [G] " e2. e2 Always fails, because we never want to unify two effects if effect names are polymorphic.e[W] State s [G] State Int Always succeeds. It's safe to take our given as a fundep annotation.][W] State Int [G] State s (when the [G] is a given that comes from a type signature)?This should fail, because it means we wrote the type signature Member (State s) r => ..., but are trying to use s as an Int. Clearly bogus! Y[W] State Int [G] State s (when the [G] was generated by running an interpreter)kSometimes OK, but only if the [G] is the only thing we're trying to solve right now. Consider the case:,runState 5 $ pure @(Sem (State Int ': r)) ()¥Here we have [G] forall a. Num a => State a and [W] State Int. Clearly the typechecking should flow "backwards" here, out of the row and into the type of runState.>What happens if there are multiple [G]s in scope for the same r³? Then we'd emit multiple unification constraints for the same effect but with different polymorphic variables, which would unify a bunch of effects that shouldn't be!polysemy-pluginA non-recursive version of .polysemy-pluginiFilter out the unifications we've already emitted, and then give back the things we should put into the S.Set Unification*, and the new constraints we should emit.polysemy-pluginwantedpolysemy-plugingiven  Safe&'-.14>DHSUVX_k6ì!polysemy-plugin>Returns the head of the list iff there is exactly one element."polysemy-pluginLike  , but in the context of an 8.#polysemy-pluginCount the number of times a is present in the list.!"#!"#None%&'-.14>DHMSUVX_kK 9polysemy-pluginCorresponds to a   ! constraint. For example, given Member (State s) r, we would get::polysemy-plugin State;polysemy-plugin State s<polysemy-plugin r=polysemy-plugin,Given a list of constraints, filter out the 9s.>polysemy-pluginIf there's only a single Member in the same r[ whose effect name matches and could possibly unify, return its effect (including tyvars.)?polysemy-plugin)Given an effect, compute its effect name.@polysemy-plugin?Generate a wanted unification for the effect described by the 9 and the given effect.Apolysemy-plugin?Generate a wanted unification for the effect described by the 9B and the given effect --- if they can be unified in this context.Bpolysemy-pluginGiven a list of C"s, find any that are of the form rred] Sem r a ~ Something, and return their rs.Dpolysemy-plugin Take the r out of Sem r a.Epolysemy-pluginGiven a list of bogus rOs, and the wanted constraints, produce bogus evidence terms that will prevent IfStuck (LocateEffect _ r) _ _ error messsages.Fpolysemy-plugin6Determine if there is exactly one wanted find for the r in question.Apolysemy-pluginThe given effect.Fpolysemy-plugin Wanted findspolysemy-plugin Effect row$$None&'-.14>DHSUVX_kKæ%%None&'-.14>DHSUVX_kL¼&&G   !"#$%&'()*+,-./0123456789:;<=>9?@ABCABDAEFGHIJKLMNOPQRS9:TUVWX.polysemy-plugin-0.2.5.0-BIMrPDJ8D271Ql61VvJZIZPolysemy.Plugin.Fundep.Stuff"Polysemy.Plugin.Fundep.UnificationPolysemy.Plugin.Fundep.UtilsPolysemy.Plugin.FundepPolysemy.PluginPolysemy.Plugin.PhasesPaths_polysemy_plugin Control.MonadwhenPolysemy.Internal.UnionFind LookupState LocationsThings PolysemyStuff findClasssemTyCon ifStuckTyConlocateEffectTyCon polysemyStuff$fCanLookupTyCon$fCanLookupClassOrdType getOrdType Unification _unifyLHS _unifyRHS SolveContext FunctionDefInterpreterUse mustUnifycanUnifyRecursivecanUnifyunzipNewWanteds $fOrdOrdType $fEqOrdType$fEqSolveContext$fOrdSolveContext$fShowSolveContext$fEqUnification$fOrdUnificationsingleListToJustwhenA countLength fundepPluginplugin extraPhasesversion getBinDir getLibDir getDynLibDir getDataDir getLibexecDir getSysconfDirgetDataFileName CanLookupghc TcRnTypes TcPluginMThingOfpolysemyStuffLocationsdoLookupTyCoRepTypeghc-prim GHC.ClassesEqOrd GHC.TypesBoolbaseGHC.Base AlternativeFindConstraint fcEffectNamefcEffectfcRowgetFindConstraintsfindMatchingEffectIfSingular getEffName mkWantedForcemkWanted getBogusRsCtextractRowFromSemsolveBogusErrorexactlyOneWantedForR