About "Var" - that is just a Name with additional info, but happens in the typechecked tree (according to API docs).
2017-10-05 18:00 GMT+02:00 Simon Peyton Jones <simo...@microsoft.com>: > well the HsWrapper might have something much more complicated than a > DFunId. It might need to construct the dictionary for Eq [a] from the DFun > for Eq [a] and a dictionary for Eq a. > > > > it would be easy to resolve the Var of the instance method. > > I don’t know what “the var of the instance method” is. > > > > I feel I’m missing the point. maybe others can help? > > > > Simon > > > > *From:* Robin Palotai [mailto:palotai.ro...@gmail.com] > *Sent:* 05 October 2017 11:17 > *To:* Simon Peyton Jones <simo...@microsoft.com> > *Cc:* GHC developers <ghc-devs@haskell.org>; haskell < > haskell-c...@haskell.org> > *Subject:* Re: Determine instance method from class method callsite > > > > Hello Simon - I outlined the approach in https://github.com/google/ > haskell-indexer/issues/73 > <https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Fgoogle%2Fhaskell-indexer%2Fissues%2F73&data=02%7C01%7Csimonpj%40microsoft.com%7C6798607dd45a4865d5ef08d50bda3727%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C636427954212256346&sdata=HkxeXUYlbyGJnHu2%2BM17Z5aE7XXAZCWCnWwGLMV1%2BEQ%3D&reserved=0> > . > TLDR is > 1) at callsite, indeed the HsWrapper needs to be analysed to get the > instance DFunId > > 2) at instance declaration site, we need to again take note of the DFunId. > > It is slightly more complicated than I expected the API. I would have > expected that from having the Var of a class method, and the <something> of > the instance (here DFunId), it would be easy to resolve the Var of the > instance method. > > But it seems there's no direct way, one has to build a lookup table from > the instance methods' (DFunId + plain stringy method name), and look that > up from the callsite. > > Or I might have missed a way to deconstruct / query a DFunId for the > method Vars. > > I'll put augmenting the commentary on my mental TODO list :) > > > > 2017-10-05 11:58 GMT+02:00 Simon Peyton Jones <simo...@microsoft.com>: > > Did you get a reply? > > > > I’m not 100% certain of your question, but consider the > > > > bar = show <expr> > > for some expression e. In the input to the type type checker the syntax > tree for the RHS will be something like > > HsApp (HsVar “show”) <syntax tree for expr> > > > > (The “show” isn’t really a string, it’s the Name for the class method.) > > > > After typechecking the syntax tree is augmented (or “elaborated”) with > type and dictionary application. So in concrete form it might look like > > bar = show @Foo dShowFoo <expr> > > > > Because show :: forall a. Show a => a -> String, so show is apply to the > type of its argument, and then to the dictionary. > > > > In HsSyn this part is done with a HsWrapper See TcEvidence.HsWrapper. The > elaborated syntax tree look like > > > > HsApp (HsWrap <wrapper> (HsVar “show”)) > > <syntax tree for elaborated expr> > > > > The <wrapper> part expresses the type and dictionary application. In this > case it’ll look like > > WpEvApp dShowFoo (WpTyApp Foo WpHole) > > > > See the notes with `HsWrapper` in TcEvidence. > > > > Does that help? > > > > It would be great to augment the https://ghc.haskell.org/trac/ > ghc/wiki/Commentary with this sort of info (insofar as it doesn’t have it > already). If you augment I can review. Email is quickly lost. > > > > Simon > > *From:* ghc-devs [mailto:ghc-devs-boun...@haskell.org] *On Behalf Of *Robin > Palotai > *Sent:* 19 September 2017 06:39 > *To:* GHC developers <ghc-devs@haskell.org>; haskell < > haskell-c...@haskell.org> > *Subject:* Determine instance method from class method callsite > > > > Sorry, I messed up subject and mailing list. Copying to both list now > after the mistake (wanted only ghc-devs for specificity). > > > > Thanks! > > > > 2017-09-19 7:36 GMT+02:00 Robin Palotai <palotai.ro...@gmail.com>: > > Hello GHC devs, > > > > Before inventing the wheel, want to check if there is a GHC API way to > look up the (fully) resolved instance method from a class method. > > > > For example, given a code > > > > data Foo Int deriving Show > > > > bar = show (Foo 3) > > > > when inspecting the Typechecked AST for bar's show call, I would like to > get to the Name / Id of 'show' of the 'Show' typeclass. > > > > I believe I could use splitHsSigmaTy on the HsType of the function call to > get the context, and then evaluate the HsWrapper somehow to find out what > instance dictionary is applied to the class restriction in the context, and > then look up the instance method from the dictionary.. > > > > Two questions: > > > > 1) Is there maybe functionality for this? > > > > 2) If not, is there any guarantee about the constraint order in the > context, at the method call? So I could more easily determine which > constraint's application to look for.. > > > > Any hints welcome && Thank you! > > Robin > > > > >
_______________________________________________ ghc-devs mailing list ghc-devs@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs