Skip to content

Narrow the scope of record wildcards notation slightly

As fallout from #12130 (closed) I narrowed the scope of record-wildcard notation slightly. Here's the commit

commit 2f8cd14fe909a377b3e084a4f2ded83a0e6d44dd
Author: Simon Peyton Jones <simonpj@microsoft.com>
Date:   Thu Jun 23 09:02:00 2016 +0100

    Narrow the use of record wildcards slightly
    
    In reviewing the fix to Trac #12130 I found the wild-card
    fill-in code for ".." notation in record constructions hard
    to understand.  It went to great contortions (including the
    find_tycon code) to allow
        data T = C { x, y :: Int }
        f x = C { .. }
    to expand to
        f x = C { x = x, y = y }
    where 'y' is an /imported function/!  That seems way over the top
    for what record wildcards are supposed to do.
    
    So I have narrowed the record-wildcard expansion to include only
    /locally-bound/ variables; i.e. not top level, and certainly not
    imported.
    
    I don't think anyone is using record wildcards in this bizarre way, so
    I don't expect any fallout. Even if there is, you can easily
    initialise fields with eponymous but imported values by hand.
    
    An intermediate position would be to allow /local/ top-level
    definitions.  But I doubt anyone is doing that either.
    
    Let's see if there's any fallout.  It's a local change, easy to
    revert, so I've just gone ahead to save everyone's time.

This ticket can be used for any commentary. I've also added a test.

Trac metadata
Trac field Value
Version 8.0.1
Type Bug
TypeOfFailure OtherFailure
Priority normal
Resolution Unresolved
Component Compiler
Test case
Differential revisions
BlockedBy
Related
Blocking
CC
Operating system
Architecture
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information