My understanding was that they ought to be the same. However, that didn't seem to be the case. In my small example, where the plugin did work, -fexpose-all-unfoldings did not.
On Sun, Oct 30, 2016 at 8:23 AM, Christiaan Baaij < christiaan.ba...@gmail.com> wrote: > One small question: what's the difference between adding INLINABLE > everywhere, and just compiling with -fexpose-all-unfoldings, > https://downloads.haskell.org/~ghc/latest/docs/html/users_ > guide/using-optimisation.html#ghc-flag--fexpose-all-unfoldings? Is there > any reason you couldn't use that flag as opposed to writing a plugin that > adds INLINEABLE pragmas to all bindings? > > On 28 October 2016 at 00:05, Ryan Trinkle <ryan.trin...@gmail.com> wrote: > >> Hi everyone, >> >> I'm trying my hand at writing a GHC plugin to generate specializations >> for all uses of a particular typeclass, and I've run into some trouble. >> I'd appreciate it if someone could point me in the right direction! I'm >> new to GHC development, so I may just be overlooking some simple stuff. >> >> The original problem: >> Reflex's interface is presented as a typeclass, which allows the >> underlying FRP engine to be selected by instance resolution. Although some >> programs make use of this (particularly the semantics test suite), most >> only ever use one implementation. However, since their code is typically >> written polymorphically, the implementation cannot be inlined and its >> rewrite rules cannot fire. This means that the typeclass >> >> My attempted solutions: >> * Initially, I wrote a plugin that adds INLINABLE pragmas to >> everything. This helped; small programs now generally see the >> inlining/rule-firings I was hoping for. However, in large programs, this >> does not occur. I'm looking into this, but also trying another approach: >> * Now, I am attempting to write a plugin that adds a SPECIALIZE pragma >> to every binding whose type mentions Reflex. >> >> The trouble: >> Since SPECIALIZE pragmas seem to be removed during typechecking >> (DsBinds.dsSpec), I can't directly add them. I would like to, perhaps, >> invoke Specialise.specBind; however, I'm not sure how to obtain the >> necessary instance - as mentioned here >> <https://github.com/ghc/ghc/blob/c36904d66f30d4386a231ce365a056962a881767/compiler/specialise/Specialise.hs#L288>, >> "only the type checker can conjure [dictionaries] up". Perhaps it's >> possible to explicitly create that dictionary somewhere and extract it for >> use during the plugin pass? >> >> >> Thanks, >> Ryan >> >> _______________________________________________ >> 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 > >
_______________________________________________ ghc-devs mailing list ghc-devs@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs