• Ryan Scott's avatar
    Disallow bang/lazy patterns in the RHSes of implicitly bidirectional patsyns · 5dd6b13c
    Ryan Scott authored
    GHC was allowing implicitly bidirectional pattern synonyms with bang
    patterns and irrefutable patterns in the RHS, like so:
    pattern StrictJust a = Just !a
    This has multiple problems:
    1. `Just !a` isn't a valid expression, so it feels strange to allow it in an
       implicitly bidirectional pattern synonym.
    2. `StrictJust` doesn't provide the strictness properties one would expect
       from a strict constructor. (One could imagine a design where the
       `StrictJust` builder infers a bang pattern for its pattern variable, but
       accomplishing this inference in a way that accounts for all possible
       patterns on the RHS, including other pattern synonyms, is somewhat
       awkward, so we do not pursue this design.)
    We nip these issues in the bud by simply disallowing bang/irrefutable patterns
    on the RHS.
    Test Plan: make test TEST="T14112 unidir"
    Reviewers: simonpj, austin, bgamari
    Reviewed By: simonpj
    Subscribers: rwbarton, thomie
    GHC Trac Issues: #14112
    Differential Revision: https://phabricator.haskell.org/D3896
unidir.stderr 291 Bytes