GHC rewrite rules for class operations & laws

Conal Elliott conal at conal.net
Thu Dec 29 00:27:20 UTC 2016


Hi, George. Yes, please do add a task, hopefully to serve as a conversation
anchor until the issues and path forward are clearer. From my perspective,
class methods are among the most natural and useful candidates for rewrite
rules, since they tend to have associated laws, many (but not all) of which
are helpful in optimization. The alternative I know (and am using) is
fairly inconvenient: replicating entire APIs just in order to delay
inlining long enough to apply rules.

Thanks,  - Conal


On Sun, Dec 11, 2016 at 7:24 AM, George Colpitts <george.colpitts at gmail.com>
wrote:

> Do you want me to add a task ticket to remove this restriction that
> rewrite rules can't be used for class methods?
>
> On Tue, Nov 22, 2016 at 8:06 AM Simon Peyton Jones via
> Glasgow-haskell-users <glasgow-haskell-users at haskell.org> wrote:
>
>> Conal
>>
>>
>>
>> Is it possible to apply GHC rewrite rules to class methods?
>>
>>
>>
>> Not currently.  See https://ghc.haskell.org/trac/ghc/ticket/11688, esp
>> comment:7 which gives links to similar examples.
>> https://ghc.haskell.org/trac/ghc/ticket/10528 comment:13  gives more
>> background.
>>
>>
>>
>> It’d be great if someone wanted to think through all this.
>>
>>
>>
>> Simon
>>
>>
>>
>> *From:* Glasgow-haskell-users [mailto:glasgow-haskell-users-
>> bounces at haskell.org] *On Behalf Of *Conal Elliott
>> *Sent:* 17 November 2016 16:40
>> *To:* glasgow-haskell-users at haskell.org
>> *Subject:* GHC rewrite rules for class operations & laws
>>
>>
>>
>> Is it possible to apply GHC rewrite rules to class methods? From what
>> I’ve read and seen, class methods get eliminated early by
>> automatically-generated rules. Is there really no way to postpone such
>> inlining until a later simplifier stage? The GHC Users Guide docs say no
>> <https://na01.safelinks.protection.outlook.com/?url=https:%2F%2Fdownloads.haskell.org%2F~ghc%2Flatest%2Fdocs%2Fhtml%2Fusers_guide%2Fglasgow_exts.html%23how-rules-interact-with-class-methods&data=02%7C01%7Csimonpj%40microsoft.com%7C8678611c4c57499f97be08d40f08662a%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C636149976146128136&sdata=GjkFhlWdNkT6eo85FvcLKkJYoir7Dui9xJ9kMTYKVmU%3D&reserved=0>,
>> and suggests instead giving a duplicate vocabulary with somewhat awkward
>> names for class methods. I’ve not seen this practice in libraries. I gather
>> that we cannot therefore use class laws as optimizations in the form of
>> rewrite rules, which seems a terrible loss.
>>
>> In Control.Category and Control.Arrow, I see rules for class laws but
>> also header comments saying “The RULES for the methods of class Arrow may
>> never fire e.g. compose/arr; see Trac #10528”.
>>
>> I’d appreciate a reality check about my conclusions as well as any
>> strategies for using class laws in optimization.
>>
>> Thanks, -- Conal
>> _______________________________________________
>> Glasgow-haskell-users mailing list
>> Glasgow-haskell-users at haskell.org
>> http://mail.haskell.org/cgi-bin/mailman/listinfo/glasgow-haskell-users
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/glasgow-haskell-users/attachments/20161228/6f008cfa/attachment.html>


More information about the Glasgow-haskell-users mailing list