Changes between Version 11 and Version 12 of ExistingRecords

Mar 29, 2006 3:03:28 PM (10 years ago)


  • ExistingRecords

    v11 v12  
     203=== Comment ===
     205(Comment from Niklas Broberg)
     207This suggestion would go a long way to alleviate the burden of
     208boiler-plate coding. It is a conservative extension, and it is
     209intuitive at that. Indeed I believe I have written code with the
     210suggested update mechanism many times without thinking on the type
     211mismatch (and been beaten on my fingers by the compiler of course).
     214Is this really necessary? Adding `~` seems less intuitive to me than
     215just writing
     217foo :: T a -> T Int
     218foo x@(C1 {}) = x {f1 = 1}
     219foo x@(C2 {}) = x {f1 = 2}
     220foo x         = x
     224foo x = x {f2 = f2 x + 1}
     226for the last example. From an implementor's point of view, if we
     227expect the proper coercions to be inferred by the type checker it
     228would still have to check that there are indeed no more fields than
     229other than `f1` that mention the parameter `a`, and also that there
     230are no more constructors that mention `f1`. Wouldn't it be just as
     231simple to assert that for all the fields that mention `a`, none of
     232these appear in any of the remaining constructors?
     234On the other hand pattern matching would certainly be more expressive
     235if `~` is added, so perhaps adding it has merit of its own. If we
     238foo :: T a -> T Int
     239foo x@(C1 {}) = x {f1 = 1}
     240foo x@(C2 {}) = x {f1 = 2}
     241foo x         = x {~f1}
     243there could still be more constructors in T a that do mention the `f1`
     244field, but there is no matching clause for them in the definition of
     245`foo`. But I would see that as a second separate proposal, e.g. a
     246Proposal for Negation in Record Pattern Matching. Sure it would fit
     247very well with the Polymorphic record update discussed here, but I
     248would think they should be treated separately.
    203250= Meta-Proposal =