RE: [GHC] #10928: Refine pattern synonym signatures

I'm getting 501 "Internal server error" from Trac. Simon | -----Original Message----- | From: ghc-tickets [mailto:ghc-tickets-bounces@haskell.org] On Behalf Of GHC | Sent: 06 October 2015 13:57 | Cc: ghc-tickets@haskell.org | Subject: Re: [GHC] #10928: Refine pattern synonym signatures | | #10928: Refine pattern synonym signatures | -------------------------------------+---------------------------------- | -------------------------------------+--- | Reporter: mpickering | Owner: | Type: bug | Status: new | Priority: normal | Milestone: 8.0.1 | Component: Compiler | Version: 7.10.2 | Resolution: | Keywords: | Operating System: Unknown/Multiple | Architecture: | | Unknown/Multiple | Type of failure: Other | Test Case: | Blocked By: | Blocking: | Related Tickets: | Differential Rev(s): | -------------------------------------+---------------------------------- | -------------------------------------+--- | | Comment (by rwbarton): | | One thing that bothers me about the current syntax is that `C1 a => C2 a | => T a` in general already has a meaning. It's the same thing as `(C1 a, | C2 a) => T a`. I don't know if this is actually valid Haskell 98 (I | suspect not), but GHC accepts it without any language flags. | | Just to throw out another option, long ago user "ski" on IRC suggested a | syntax for existentials-plus-constraints, dual to constrained polymorphic | values. The idea is dual to {{{ forall a. C a => T a }}} which is a sort | of function that accepts a `C a` constraint and produces a value, we have | {{{ exists a. C a *> T a }}} which is a sort of pair of a `C a` | constraint (dictionary) and a value. | (Mnemonic: `*` is like a pair and `>` is from `=>`. Not sure I am | convinced myself.) | | I'm not sure whether this applies directly to pattern synonyms since a | pattern is not really the same thing as a value. But, we could at least use | the idea of two different bits of syntax for provided and required | constraints, e.g., {{{ pattern P :: (Eq a, Num a) => (Show a, Show b) *> b | -> T a }}} Here I am thinking of `(Eq a, Num a)` as in negative position | and `(Show a, Show b)` in positive position, so tentatively using the | corresponding `=>` and `*>`. | | Advantages: | | * Does not use syntax that already has another meaning (`C1 a => C2 a => T | a`) | | * You can write patterns with either empty required constraints or empty | provided constraints (`Cr a => T a`, `Cp a *> T a`) without having to add | an empty context | | * Not extremely verbose like Richard's verbose syntax | | Disadvantages: | | * Another funny bit of syntax to learn. But at least it appears in only | one context. | | -- | Ticket URL: | <https://na01.safelinks.protection.outlook.com/?url=http%3a%2f%2fghc.haskell | .org%2ftrac%2fghc%2fticket%2f10928%23comment%3a9&data=01%7c01%7csimonpj%4006 | 4d.mgd.microsoft.com%7c36aef97285934ba72df008d2ce4ded93%7c72f988bf86f141af91 | ab2d7cd011db47%7c1&sdata=ppvz43W510K87Zo073GgRRNtUyhCv%2foAVTOKmQoFl%2b0%3d> | GHC | <https://na01.safelinks.protection.outlook.com/?url=http%3a%2f%2fwww.haskell | .org%2fghc%2f&data=01%7c01%7csimonpj%40064d.mgd.microsoft.com%7c36aef9728593 | 4ba72df008d2ce4ded93%7c72f988bf86f141af91ab2d7cd011db47%7c1&sdata=uSFUfOAOr% | 2b8rRO%2f3mfxurv7Xd%2bRrqvwcZFBYF0SZITc%3d> | The Glasgow Haskell Compiler | _______________________________________________ | ghc-tickets mailing list | ghc-tickets@haskell.org | https://na01.safelinks.protection.outlook.com/?url=http%3a%2f%2fmail.haskell | .org%2fcgi-bin%2fmailman%2flistinfo%2fghc- | tickets&data=01%7c01%7csimonpj%40064d.mgd.microsoft.com%7c36aef97285934ba72d | f008d2ce4ded93%7c72f988bf86f141af91ab2d7cd011db47%7c1&sdata=T8hBjZDRWulMjNrG | nrLd5TRA1cR8yEmmnuO9LfNjNG8%3d
participants (1)
-
Simon Peyton Jones