I get it. Thanks, Ben! On Fri, Aug 3, 2018 at 12:48 PM, Ben Gamari <b...@smart-cactus.org> wrote:
> On August 2, 2018 9:25:05 PM EDT, Conal Elliott <co...@conal.net> wrote: > >GHC 8.2.2 and 8.4.3 dislike the following rules: > > > >``` haskell > >{-# RULES > > > >"pair fst snd" forall p. (,) (exl p) (exr p) = p > > > >"swap" forall p. (,) (exr p) (exl p) = swap p > > > > #-} > >``` > > > >Error messages: > > > >``` haskell > >/Users/conal/Haskell/concat/plugin/src/ConCat/Rebox.hs:485:1: warning: > > A constructor, (,), appears as outermost match in RULE lhs. > > This rule will be ignored. > > | > >485 | "pair fst snd" forall p. (,) (exl p) (exr p) = p > > | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > > > >/Users/conal/Haskell/concat/plugin/src/ConCat/Rebox.hs:489:1: warning: > > A constructor, (,), appears as outermost match in RULE lhs. > > This rule will be ignored. > > | > >489 | "swap" forall p. (,) (exr p) (exl p) = swap p > > | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ > >``` > > > >GHC 8.0.2 didn't complain about these rules, though I'm unsure whether > >they > >worked as desired. > > > >Why disallow such rules (with constructors at the head)? > > > >-- Conal > > While we only started warning about them recently, previously the rules > almost certainly weren't firing as you expected them to. The trouble is > that constructors are often replaced with their wrappers rather early in > simplification. This meant that matching on constructors in rules was quite > unreliable. This is discussed in #13290. > > Cheers, > > - Ben >
_______________________________________________ Glasgow-haskell-users mailing list Glasgow-haskell-users@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/glasgow-haskell-users