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