1. 06 Sep, 2017 1 commit
  2. 05 Sep, 2017 13 commits
    • Ryan Scott's avatar
      Implicitly bind kind variables in type family instance RHSes when it's sensible · 0829821a
      Ryan Scott authored
      Summary:
      Before, there was a discrepancy in how GHC renamed type synonyms as
      opposed to type family instances. That is, GHC would accept definitions like
      this one:
      
      ```lang=haskell
      type T = (Nothing :: Maybe a)
      ```
      
      However, it would not accept a very similar type family instance:
      
      ```lang=haskell
      type family   T :: Maybe a
      type instance T = (Nothing :: Maybe a)
      ```
      
      The primary goal of this patch is to bring the renaming of type family
      instances up to par with that of type synonyms, causing the latter definition
      to be accepted, and fixing #14131.
      
      In particular, we now allow kind variables on the right-hand sides of type
      (and data) family instances to be //implicitly// bound by LHS type (or kind)
      patterns (as opposed to type variables, which must always be explicitly
      bound by LHS type patterns only). As a consequence, this allows programs
      reported in #7938 and #9574 to typecheck, whereas before they would
      have been rejected.
      
      Implementation-wise, there isn't much trickery involved in making this happen.
      We simply need to bind additional kind variables from the RHS of a type family
      in the right place (in particular, see `RnSource.rnFamInstEqn`, which has
      undergone a minor facelift).
      
      While doing this has the upside of fixing #14131, it also made it easier to
      trigger #13985, so I decided to fix that while I was in town. This was
      accomplished by a careful blast of `reportFloatingKvs` in `tcFamTyPats`.
      
      Test Plan: ./validate
      
      Reviewers: simonpj, goldfire, austin, bgamari
      
      Reviewed By: simonpj
      
      Subscribers: rwbarton, thomie
      
      GHC Trac Issues: #13985, #14131
      
      Differential Revision: https://phabricator.haskell.org/D3872
      0829821a
    • Ben Gamari's avatar
      rts: Add heap breakdown type for -hT · 24e50f98
      Ben Gamari authored
      Test Plan: Build, program with `-eventlog`, try running with `+RTS -h`
      
      Reviewers: austin, erikd, simonmar
      
      Subscribers: rwbarton, thomie
      
      GHC Trac Issues: #14096
      
      Differential Revision: https://phabricator.haskell.org/D3922
      24e50f98
    • Ben Gamari's avatar
      eventlog: Clean up profiling heap breakdown type · 822abbb1
      Ben Gamari authored
      Reviewers: austin, erikd, simonmar
      
      Subscribers: rwbarton, thomie
      
      GHC Trac Issues: #14096
      
      Differential Revision: https://phabricator.haskell.org/D3923
      822abbb1
    • Ben Gamari's avatar
      StgLint: Show constructor arity in mismatch message · c2881a23
      Ben Gamari authored
      Reviewers: austin
      
      Subscribers: rwbarton, thomie
      
      Differential Revision: https://phabricator.haskell.org/D3921
      c2881a23
    • alekzcb's avatar
      base: Update acosh to handle -1::Complex · 6458b8dc
      alekzcb authored
      Summary: Fixes #8532
      
      Reviewers: austin, hvr, bgamari
      
      Reviewed By: bgamari
      
      Subscribers: rwbarton, thomie
      
      GHC Trac Issues: #8532
      
      Differential Revision: https://phabricator.haskell.org/D3916
      6458b8dc
    • Ben Gamari's avatar
      SetLevels: Substitute in ticks in lvlMFE · cd857dd4
      Ben Gamari authored
      Previously SetLevels.lvlMFE would fail to substitute in ticks, unlike
      lvlExpr.  This lead to #13481. Fix this.
      
      Test Plan: `make test TEST=T12622 WAY=ghci`
      
      Reviewers: austin, simonpj
      
      Reviewed By: simonpj
      
      Subscribers: simonpj, rwbarton, thomie
      
      GHC Trac Issues: #13481
      
      Differential Revision: https://phabricator.haskell.org/D3920
      cd857dd4
    • Tamar Christina's avatar
      Replace hashing function for string keys implementation with xxhash · 542f89ff
      Tamar Christina authored
      When doing profiling on startup time of ghci on Windows, both cold and
      startup loading static LLVM libs, the profiler is showing a glaring red
      spot on the division operation of the the hashStr function.
      
      In fact profiling shows 14% of the time is spent hashing the keys.
      
      So I am replacing the hash function with xxHash which is a very fast
      non-crypto hash. It's faster than MurMurHash which node etc use.
      
      It also passes SMHasher. I can provide if required the collected raw
      data.  But from analysis done on the keys, xxHash does not introduce
      more collisions than before, the amount splits seem about the same and
      the distributions among the buckets are slightly more uniform than
      before.
      
      However the runtime dropped enough to remove the function completely
      from the profiler's report.
      
      There's also a noticeable improvement in responsiveness.
      
      xxHash is BSD licensed and can be found
      https://github.com/Cyan4973/xxHash
      
      Test Plan: ./validate
      
      Reviewers: austin, bgamari, erikd, simonmar
      
      Reviewed By: bgamari
      
      Subscribers: rwbarton, thomie
      
      GHC Trac Issues: #13165
      
      Differential Revision: https://phabricator.haskell.org/D3909
      542f89ff
    • Ben Gamari's avatar
      get-win32-tarballs: Use correct `find` · a4c2ac2c
      Ben Gamari authored
      This fixes #12502 by using the `find` utility found by FP_PROG_FIND
      instead of the first one in PATH.
      
      Test Plan: Validate on Windows
      
      Reviewers: Phyx, austin, hvr
      
      Reviewed By: Phyx
      
      Subscribers: rwbarton, thomie, erikd
      
      GHC Trac Issues: #12502
      
      Differential Revision: https://phabricator.haskell.org/D3907
      a4c2ac2c
    • Ben Gamari's avatar
      get-win32-tarballs: Use bash, not sh · 1300afaa
      Ben Gamari authored
      The script appears to use the local keyword, which I'm fairly certain is
      a feature of bash and not sh.
      
      Reviewers: Phyx, austin
      
      Reviewed By: Phyx
      
      Subscribers: rwbarton, thomie
      
      Differential Revision: https://phabricator.haskell.org/D3906
      1300afaa
    • Ryan Scott's avatar
      Fix egregious duplication of vars in RnTypes · b9ac9e05
      Ryan Scott authored
      `RnTypes` contains a fairly intricate algorithm to extract
      the kind and type variables of an HsType. This algorithm carefully
      maintains the separation between type variables and kind variables
      so that the difference between `-XPolyKinds` and `-XTypeInType` can
      be respected.
      
      But after doing all this, `rmDupsInRdrTyVars` stupidly just
      concatenated the lists of type and kind variables at the end. If a
      variable were used as both a type and a kind, the algorithm would
      produce *both*! This led to all kinds of problems, including #13988.
      
      This is mostly Richard Eisenberg's patch. The only original
      contribution I made was adapting call sites of `rnImplicitBndrs` to
      work with the new definition of `rmDupsInRdrTyVars`. That is,
      `rnImplicitBndrs` checks for variables that are illegally used in
      both type and kind positions without using `-XTypeInType`, but in
      order to check this, one cannot have filtered duplicate variables out
      before passing them to `rnImplicitBndrs`. To accommodate for this, I
      needed to concoct variations on the existing `extract-` functions in
      `RnTypes` which do not remove duplicates, and use those near
      `rnImplicitBndrs` call sites.
      
      test case: ghci/scripts/T13988
      
      Test Plan: make test TEST=T13988
      
      Reviewers: goldfire, simonpj, austin, bgamari
      
      Reviewed By: goldfire, simonpj
      
      Subscribers: rwbarton, thomie
      
      GHC Trac Issues: #13988
      
      Differential Revision: https://phabricator.haskell.org/D3902
      b9ac9e05
    • alexbiehl's avatar
      Remember the AvailInfo for each IE · 7e5d4a0e
      alexbiehl authored
      This is another take on https://phabricator.haskell.org/D3844.
      
      This patch removes then need for haddock to reimplement the calculation
      of exported names from modules. Instead when renaming export lists ghc
      annotates each IE with its exported names.
      
      Haddocks current  export logic has caused lots of trouble in the past
      (on the Github issue tracker):
        - https://github.com/haskell/haddock/issues/121
        - https://github.com/haskell/haddock/issues/174
        - https://github.com/haskell/haddock/issues/225
        - https://github.com/haskell/haddock/issues/344
        - https://github.com/haskell/haddock/issues/584
        - https://github.com/haskell/haddock/issues/591
        - https://github.com/haskell/haddock/issues/597
      
      Updates haddock submodule.
      
      Reviewers: austin, bgamari, ezyang
      
      Reviewed By: bgamari, ezyang
      
      Subscribers: rwbarton, thomie
      
      Differential Revision: https://phabricator.haskell.org/D3864
      7e5d4a0e
    • Ben Gamari's avatar
      testsuite: Add test for #14129 · b996e12d
      Ben Gamari authored
      It's not impossible that this will also get caught by another test given
      a suitably configured compiler, but this is minimal enough that it seems
      worth including.
      
      Test Plan: Validate with `DYNAMIC_GHC_PROGRAMS=NO`
      
      Reviewers: austin
      
      Subscribers: rwbarton, thomie
      
      GHC Trac Issues: #14129
      
      Differential Revision: https://phabricator.haskell.org/D3924
      b996e12d
    • Ben Gamari's avatar
      testsuite: Fix validation of ways · 31281a47
      Ben Gamari authored
      Test Plan: Run `make test WAY=prof`
      
      Reviewers: angerman, austin
      
      Subscribers: rwbarton, thomie
      
      GHC Trac Issues: #14181
      
      Differential Revision: https://phabricator.haskell.org/D3917
      31281a47
  3. 04 Sep, 2017 1 commit
  4. 02 Sep, 2017 5 commits
    • Ryan Scott's avatar
      Document the Generic(1) laws · 0ec43769
      Ryan Scott authored
      Summary:
      Some code that @dfeuer was writing implicitly depended on these laws,
      but they didn't appear to be enshrined in the Haddocks. Let's do so.
      
      Test Plan: Read it
      
      Reviewers: austin, hvr, bgamari, dfeuer
      
      Reviewed By: dfeuer
      
      Subscribers: rwbarton, thomie, dfeuer
      
      Differential Revision: https://phabricator.haskell.org/D3908
      0ec43769
    • Ryan Scott's avatar
      Fix #14167 by using isGadtSyntaxTyCon in more places · 8e4229ab
      Ryan Scott authored
      Summary:
      Two places in GHC effectively attempt to //guess// whether a data type
      was declared using GADT syntax:
      
      1. When reifying a data type in Template Haskell
      2. When pretty-printing a data type (e.g., via `:info` in GHCi)
      
      But there's no need for heuristics here, since we have a 100% accurate way to
      determine whether a data type was declared using GADT syntax: the
      `isGadtSyntaxTyCon` function! By simply using that as the metric, we obtain
      far more accurate TH reification and pretty-printing results.
      
      This is technically a breaking change, since Template Haskell reification will
      now reify some data type constructors as `(Rec)GadtC` that it didn't before,
      and some data type constructors that were previously reified as `(Rec)GadtC`
      will no longer be reified as such. But it's a very understandable breaking
      change, since the previous behavior was simply incorrect.
      
      Test Plan: ./validate
      
      Reviewers: simonpj, goldfire, austin, bgamari
      
      Reviewed By: simonpj
      
      Subscribers: rwbarton, thomie
      
      GHC Trac Issues: #14167
      
      Differential Revision: https://phabricator.haskell.org/D3901
      8e4229ab
    • Ryan Scott's avatar
      Disallow bang/lazy patterns in the RHSes of implicitly bidirectional patsyns · 5dd6b13c
      Ryan Scott authored
      Summary:
      GHC was allowing implicitly bidirectional pattern synonyms with bang
      patterns and irrefutable patterns in the RHS, like so:
      
      ```lang=haskell
      pattern StrictJust a = Just !a
      ```
      
      This has multiple problems:
      
      1. `Just !a` isn't a valid expression, so it feels strange to allow it in an
         implicitly bidirectional pattern synonym.
      2. `StrictJust` doesn't provide the strictness properties one would expect
         from a strict constructor. (One could imagine a design where the
         `StrictJust` builder infers a bang pattern for its pattern variable, but
         accomplishing this inference in a way that accounts for all possible
         patterns on the RHS, including other pattern synonyms, is somewhat
         awkward, so we do not pursue this design.)
      
      We nip these issues in the bud by simply disallowing bang/irrefutable patterns
      on the RHS.
      
      Test Plan: make test TEST="T14112 unidir"
      
      Reviewers: simonpj, austin, bgamari
      
      Reviewed By: simonpj
      
      Subscribers: rwbarton, thomie
      
      GHC Trac Issues: #14112
      
      Differential Revision: https://phabricator.haskell.org/D3896
      5dd6b13c
    • Ryan Scott's avatar
      Document the intricacies of ForallC variable quantification better · 6330b0b0
      Ryan Scott authored
      Summary:
      I recently (re-)discovered that `ForallC` quantifies different type variables
      depending on whether `GadtC` is present or not. This is an important
      enough gotcha where I feel like this fact should also be advertised in the
      `template-haskell` documentation itself, so this patch does just that.
      
      Test Plan: Read it
      
      Reviewers: goldfire, austin, bgamari
      
      Subscribers: rwbarton, thomie
      
      GHC Trac Issues: #13885
      
      Differential Revision: https://phabricator.haskell.org/D3880
      6330b0b0
    • Herbert Valerio Riedel's avatar
      Update transformers submodule · 590e7376
      Herbert Valerio Riedel authored
      This updates `transformers` from the v0.5.2 release to the
      v0.5.4 release + unreleased changes
      
      This is a pre-requisite for the Semigroup=>Monoid implementation
      590e7376
  5. 01 Sep, 2017 4 commits
  6. 31 Aug, 2017 5 commits
    • Herbert Valerio Riedel's avatar
      Add missing Semigroup instances in utils/{hpc,runghc} · b2c2e3e8
      Herbert Valerio Riedel authored
      This is a follow-up to c0feee90
      b2c2e3e8
    • Herbert Valerio Riedel's avatar
      Add missing Semigroup instances to compiler · c0feee90
      Herbert Valerio Riedel authored
      This is a pre-requisite for implementing the Semigroup/Monoid proposal.
      The instances have been introduced in a way to minimise warnings.
      c0feee90
    • Simon Peyton Jones's avatar
      Really fix Trac #14158 · 2c133b67
      Simon Peyton Jones authored
      I dug more into how #14158 started working. I temporarily reverted the
      patch that "fixed" it, namely
      
          commit a6c448b4
          Author: Simon Peyton Jones <simonpj@microsoft.com>
          Date:   Mon Aug 28 17:33:59 2017 +0100
      
          Small refactor of getRuntimeRep
      
      Sure enough, there was a real bug, described in the new
      TcExpr Note [Visible type application zonk]
      
      In general, syntactic substituion should be kind-preserving!
      Maybe we should check that invariant...
      2c133b67
    • Simon Peyton Jones's avatar
      Small changes to ddump-tc tracing · 3790ea90
      Simon Peyton Jones authored
      3790ea90
    • Simon Peyton Jones's avatar
      Add debugPprType · 805b29bb
      Simon Peyton Jones authored
      We pretty-print a type by converting it to an IfaceType and
      pretty-printing that.  But
       (a) that's a bit indirect, and
       (b) delibrately loses information about (e.g.) the kind
            on the /occurrences/ of a type variable
      
      So this patch implements debugPprType, which pretty prints
      the type directly, with no fancy formatting.  It's just used
      for debugging.
      
      I took the opportunity to refactor the debug-pretty-printing
      machinery a little.  In particular, define these functions
      and use them:
      
        ifPprDeubug :: SDoc -> SDOc -> SDoc
          -- Says what to do with and without -dppr-debug
        whenPprDebug :: SDoc -> SDoc
          -- Says what to do with  -dppr-debug; without is empty
        getPprDebug :: (Bool -> SDoc) -> SDoc
      
      getPprDebug used to be called sdocPprDebugWith
      whenPprDebug used to be called ifPprDebug
      
      So a lot of files get touched in a very mechanical way
      805b29bb
  7. 30 Aug, 2017 3 commits
    • Simon Peyton Jones's avatar
      Define and use HsArg · fca19628
      Simon Peyton Jones authored
      All this Left/Right business was making my head spin, so I defined
      
      data HsArg tm ty
        = HsValArg tm   -- Argument is an ordinary expression     (f arg)
        | HsTypeArg  ty -- Argument is a visible type application (f @ty)
      
      and used it.  This is just simple refactor; no change in behaviour.
      fca19628
    • Simon Peyton Jones's avatar
      Add comments to RnTypes · 628b6669
      Simon Peyton Jones authored
      These comments clarify the details of:
      
        commit 0257dacf
        Author: Simon Peyton Jones <simonpj@microsoft.com>
        Date:   Mon Aug 28 14:20:02 2017 +0100
      
            Refactor bindHsQTyVars and friends
      628b6669
    • Simon Peyton Jones's avatar
      Add some traceRn and (Outputable StmtTree) · 567dca6e
      Simon Peyton Jones authored
      I added these when investigating Trac #14163, but they'll be
      useful anyway.
      567dca6e
  8. 29 Aug, 2017 8 commits