Skip to content
  • Simon Peyton Jones's avatar
    Rejig builders for pattern synonyms, especially unlifted ones · e8762081
    Simon Peyton Jones authored
    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
    e8762081