The patch now validates at D1152. https://phabricator.haskell.org/D1152
On Tue, Aug 11, 2015 at 11:26 PM, Matthew Pickering <[email protected]> wrote: > Thank you for your comments Richard. > > >> I'm assuming `pattern Foo{bar, baz} = (bar, baz)` from the wiki page, >> without any further pattern type signature. This example then looks >> straightforward to me -- I feel I'm missing the subtlety. `foo` would get >> the type `(a,b) -> (b,b)` and would be roughly equivalent to `foo a@(bar, >> baz) = case a of (_, baz2) -> (baz, baz2)`. The case statement and baz2 is >> necessary just to provide a predictable desugaring of record updates; >> handwritten code should clearly be more succinct. > > This is how I imagined it to work. > >> This would desugar to `foo x = case x of Just _ -> Just 5`. I'm not sure >> about pattern exhaustiveness warnings, but I would expect such a record >> update to be partial. The partiality of record updates has been surprising >> in the past, but I don't think adding pattern synonyms to the mix should >> change that. > > Yes, I agree. > >> I would like to keep record updates for the same reasons you appear to. I >> will warn that they are quite hard to work with, though! About 220 lines of >> dense code (including comments) are necessary to type-check regular old >> record updates. This isn't to scare you off, but to have you suitably >> forewarned and forearmed. > > I consider myself warned! > > >> What do you mean here? Without checking, I assumed that the x in `x { ... }` >> had to be a variable. But this is wrong! See 3.15.3 of the Haskell 2010 >> report >> (https://www.haskell.org/onlinereport/haskell2010/haskellch3.html#x8-490003.15). >> So I think it's already generalized. > > Good news. This should simplify the implementation. > >> >> Many thanks for taking this on! >> Richard >> _______________________________________________ ghc-devs mailing list [email protected] http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
