ryan.trinkle at gmail.com
Mon Oct 31 00:50:45 UTC 2016
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.baaij at gmail.com> wrote:
> One small question: what's the difference between adding INLINABLE
> everywhere, and just compiling with -fexpose-all-unfoldings,
> 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.trinkle at 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
>> "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?
>> ghc-devs mailing list
>> ghc-devs at haskell.org
> ghc-devs mailing list
> ghc-devs at haskell.org
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the ghc-devs