I'm pretty sure the `buildDictionary` function doesn't do what I need. AFAICT, you pass it a `Var` which contains a dictionary, and it tells you what is in that dictionary. What I need is a function with type `Var -> Var` where the first `Var` contains a function, and the output `Var` is the dictionary.
For example, given the expression: log (a1+a2) In core, this might look like: log @ Float $fFloatingFloat (+ @ Float $fNumFloat a1 a2) I want to mechanically construct the core code above. When doing so, each function within a type class has an extra argument, which is the dictionary for that type class. `log` no longer takes one parameter; in core, it takes two. I'm having trouble figuring out how to get the appropriate dictionary to pass as the "dictionary parameter" to these functions. On Mon, Aug 17, 2015 at 4:21 PM, Andrew Farmer <afar...@ittc.ku.edu> wrote: > HERMIT has some code for building dictionaries for a given predicate > type (by invoking the typechecker functions that do this): > > https://github.com/ku-fpg/hermit/blob/master/src/HERMIT/Dictionary/GHC.hs#L223 > > The functions to run TcM computations inside CoreM are here: > > https://github.com/ku-fpg/hermit/blob/master/src/HERMIT/Monad.hs#L242 > and > https://github.com/ku-fpg/hermit/blob/master/src/HERMIT/GHC/Typechecker.hs#L47 > > Perhaps that will help get you started? > > I would like to push these interfaces back into the GHC API at some > point, but just haven't done it yet. > > HTH > Andrew > > On Mon, Aug 17, 2015 at 4:12 PM, Mike Izbicki <m...@izbicki.me> wrote: >> I'm not sure how either of those two functions can help me. The >> problem is that given an operator (e.g. `+`), I don't know the name of >> the dictionary that needs to be passed in as the first argument to the >> operator. I could probably hard code these names, but then the plugin >> wouldn't be able to work with alternative preludes. >> >> On Fri, Aug 7, 2015 at 11:20 PM, Edward Z. Yang <ezy...@mit.edu> wrote: >>> Hello Mike, >>> >>> Give importDecl from LoadIface a try, or maybe tcLookupGlobal if >>> you're in TcM. >>> >>> Edward >>> >>> Excerpts from Mike Izbicki's message of 2015-08-07 15:40:30 -0700: >>>> I'm trying to write a GHC plugin. The purpose of the plugin is to >>>> provide Haskell bindings to Herbie. Herbie >>>> (https://github.com/uwplse/herbie) is a program that takes a >>>> mathematical statement as input, and gives you a numerically stable >>>> formula to compute it as output. The plugin is supposed to automate >>>> this process for Haskell programs. >>>> >>>> I can convert the core expressions into a format for Herbie just fine. >>>> Where I'm having trouble is converting the output from Herbie back >>>> into core. Given a string that represents a numeric operator (e.g. >>>> "log" or "+"), I can get that converted into a Name that matches the >>>> Name of the version of that operator in scope at the location. But in >>>> order to create an Expr, I need to convert the Name into a Var. All >>>> the functions that I can find for this (e.g. mkGlobalVar) also require >>>> the type of the variable. But I can't find a way to figure out the >>>> Type given a Name. How can I do this? >> _______________________________________________ >> ghc-devs mailing list >> ghc-devs@haskell.org >> http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs >> _______________________________________________ ghc-devs mailing list ghc-devs@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs