#7162: RULES that never fire (automatically)
---------------------------------+------------------------------------------
Reporter: andygill | Owner:
Type: feature request | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 7.4.2
Keywords: | Os: Unknown/Multiple
Architecture: Unknown/Multiple | Failure: None/Unknown
Difficulty: Unknown | Testcase:
Blockedby: | Blocking:
Related: |
---------------------------------+------------------------------------------
Changes (by simonpj):
* difficulty: => Unknown
Old description:
> We want a way of having GHC RULES known by GHC, but not used by the
> optimizer.
>
> HERMIT, a interactive plugin for GHC that applies rules - and as well as
> built in rules (like alpha conversion, beta-reduction, etc) - also
> provide access to the named GHC RULES. Here is the rub: We want to use
> GHC RULES that are parsed and typed checked like normal rules, are
> visible to the HERMIT system, but never run by the simplifier. Currently
> we can say
> - attempt this *before* this (opt) pass, or
> - attempt *after* this pass, there is no way of saying
> - *never* attempt.
>
> We were thinking
>
> {-# RULES [~] "map/map" forall f g . map f (map g xs) = map (f.g) xs
> #-}
>
> Where the [~] says *never* execute this without be explicitly asked,
> following on from the [~0] which does not run in first pass.
>
> We happy making the required changes.
New description:
We want a way of having GHC RULES known by GHC, but not used by the
optimizer.
HERMIT, a interactive plugin for GHC that applies rules - and as well as
built in rules (like alpha conversion, beta-reduction, etc) - also provide
access to the named GHC RULES. Here is the rub: We want to use GHC RULES
that are parsed and typed checked like normal rules, are visible to the
HERMIT system, but never run by the simplifier. Currently we can say
- attempt this '''before''' this (opt) pass, or
- attempt '''after''' this pass,
but there is no way of saying
- '''never''' attempt.
We were thinking
{{{
{-# RULES [~] "map/map" forall f g . map f (map g xs) = map (f.g) xs
#-}
}}}
Where the `[~]` says *never* execute this without be explicitly asked,
following on from the `[~0]` which does not run in first pass.
We are happy making the required changes.
--
Comment:
I think I'm ok with this. All the machinery is there already except for
the concrete syntax to say "never execute".
The only question in my mind is whether to be a bit more explicit by
saying
{{{
{-# RULES [NEVER] "map/map" ... #-}
}}}
but that means more work in the lexer, so it probably isn't worth it. I
don't feel strongly.
Simon
--
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/7162#comment:1>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
_______________________________________________
Glasgow-haskell-bugs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs