[commit: ghc] master: Rejig builders for pattern synonyms, especially unlifted ones (e876208)

Simon Peyton Jones simonpj at microsoft.com
Fri Nov 21 13:06:21 UTC 2014


Heads up: this commit means you need to blow away all your .hi files.

Simon

|  -----Original Message-----
|  From: ghc-commits [mailto:ghc-commits-bounces at haskell.org] On Behalf
|  Of git at git.haskell.org
|  Sent: 21 November 2014 13:03
|  To: ghc-commits at haskell.org
|  Subject: [commit: ghc] master: Rejig builders for pattern synonyms,
|  especially unlifted ones (e876208)
|  
|  Repository : ssh://git@git.haskell.org/ghc
|  
|  On branch  : master
|  Link       :
|  http://ghc.haskell.org/trac/ghc/changeset/e876208117a34fb58f7f1e470de2
|  f954b3ca303d/ghc
|  
|  >---------------------------------------------------------------
|  
|  commit e876208117a34fb58f7f1e470de2f954b3ca303d
|  Author: Simon Peyton Jones <simonpj at microsoft.com>
|  Date:   Fri Nov 21 10:04:09 2014 +0000
|  
|      Rejig builders for pattern synonyms, especially unlifted ones
|  
|      When a pattern synonym is for an unlifted pattern, its "builder"
|  would
|      naturally be a top-level unlifted binding, which isn't allowed.
|  So we
|      give it an extra Void# argument.
|  
|      Our Plan A involved then making *two* Ids for these builders, with
|      some consequential fuss in the desugarer.  This was more pain than
|  I
|      liked, so I've re-jigged it.
|  
|       * There is just one builder for a pattern synonym.
|  
|       * It may have an extra Void# arg, but this decision is signalled
|         by the Bool in the psBuilder field.
|  
|         I did the same for the psMatcher field.
|  
|         Both Bools are serialised into interface files, so there is
|         absolutely no doubt whether that extra Void# argument is
|  required.
|  
|       * I renamed "wrapper" to "builder".  We have too may "wrappers"
|  
|       * In order to deal with typecchecking occurrences of P in
|  expressions,
|         I refactored the tcInferId code in TcExpr.
|  
|      All of this allowed me to revert 5fe872
|         "Apply compulsory unfoldings during desugaring, except for
|  `seq` which is special."
|      which turned out to be a rather messy hack in DsBinds
|  
|  
|  >---------------------------------------------------------------
|  
|  e876208117a34fb58f7f1e470de2f954b3ca303d
|   compiler/basicTypes/PatSyn.lhs       | 207 +++++++++++++++-----------
|  ----
|   compiler/deSugar/DsExpr.lhs          |  22 +---
|   compiler/deSugar/DsUtils.lhs         |  10 +-
|   compiler/iface/BuildTyCl.lhs         |   8 +-
|   compiler/iface/IfaceSyn.lhs          |  12 +-
|   compiler/iface/MkIface.lhs           |   9 +-
|   compiler/iface/TcIface.lhs           |  65 ++--------
|   compiler/typecheck/TcBinds.lhs       |  14 +--
|   compiler/typecheck/TcExpr.lhs        | 162 ++++++++----------------
|   compiler/typecheck/TcPatSyn.lhs      | 237 +++++++++++++++++++++-----
|  ---------
|   compiler/typecheck/TcPatSyn.lhs-boot |   4 +-
|   compiler/typecheck/TcRnMonad.lhs     |   5 +
|   12 files changed, 338 insertions(+), 417 deletions(-)
|  
|  Diff suppressed because of size. To see it, use:
|  
|      git diff-tree --root --patch-with-stat --no-color --find-copies-
|  harder --ignore-space-at-eol --cc
|  e876208117a34fb58f7f1e470de2f954b3ca303d
|  _______________________________________________
|  ghc-commits mailing list
|  ghc-commits at haskell.org
|  http://www.haskell.org/mailman/listinfo/ghc-commits


More information about the ghc-devs mailing list