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
_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/glasgow-haskell-users

Reply via email to