Implementing pattern synonym constructor signatures

David Feuer david at well-typed.com
Tue Jan 16 05:21:13 UTC 2018


3. Someone could write
pattern P x <- ... where  P :: ...  P x = ...
The pattern signature has to be the same as the constructor signature except for constraints, so it doesn't necessarily sound trivial to infer.


David FeuerWell-Typed, LLP
-------- Original message --------From: Simon Peyton Jones <simonpj at microsoft.com> Date: 1/15/18  6:36 PM  (GMT-05:00) To: David Feuer <david at well-typed.com> Cc: ghc-devs at haskell.org Subject: RE: Implementing pattern synonym constructor signatures 
0. Parsing. I wasn't actually able to find the code that parses pattern synonyms. Can someone point me in the right direction?

Parser.y line 1356, production ‘patteron_synonym_decl’ looks plausible.

Currently we have
data HsPatSynDir id
  = Unidirectional
  | ImplicitBidirectional
  | ExplicitBidirectional (MatchGroup id (LHsExpr id))
so in the bidirectional case all we have a MatchGroup, built with mkPatSynMatchGroup.    To serve the proposal we need an optional signature in there too.

1. When there is a constructor signature, it needs to be used for the construction function instead of the pattern signature. Can someone give point me in the right direction about how to do this?

TcPatSyn.tcPatSynBuilderBind is a good place to start.

2. When there is a constructor signature but no pattern signature, what should we do? I think "give up" sounds okay for now.

I don’t understand.  Can you give an example?

Simon
From: David Feuer [mailto:david at well-typed.com]
Sent: 15 January 2018 19:11
To: Simon Peyton Jones <simonpj at microsoft.com>
Cc: ghc-devs at haskell.org
Subject: Implementing pattern synonym constructor signatures

Over the past week I've started digging into the code that implements pattern synonyms with an eye toward implementing the pattern synonym construction function signature proposal. I think I understand a decent amount of what's going on most places. However, I don't understand enough about type checking to have any idea about what needs to change where or how. There are several things that need to be addressed:

0. Parsing. I wasn't actually able to find the code that parses pattern synonyms. Can someone point me in the right direction?

1. When there is a constructor signature, it needs to be used for the construction function instead of the pattern signature. Can someone give point me in the right direction about how to do this?

2. When there is a constructor signature but no pattern signature, what should we do? I think "give up" sounds okay for now.

3. A pattern synonym without a constructor signature needs to be treated as it is today, so the machinery for matching things up needs to remain available.

David Feuer
Well-Typed, LLP
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-devs/attachments/20180116/d7b9f7ea/attachment.html>


More information about the ghc-devs mailing list