1. 12 Aug, 2017 3 commits
    • Ryan Scott's avatar
      Use NonEmpty lists to represent lists of duplicate elements · 7d699782
      Ryan Scott authored
      Summary:
      Three functions in `ListSetOps` which compute duplicate elements
      represent lists of duplicates of `[a]`. This is a really bad way to go about
      things, because these lists are guaranteed to always have at least one element
      (the "representative" of the duplicates), and several places in the GHC API
      call `head` (a partial function) on these lists of duplicates to retrieve the
      representative.
      
      This changes the representation of duplicates to `NonEmpty` lists instead,
      which allow for many partial uses of `head` to be made total.
      
      Fixes #13823.
      
      Test Plan: ./validate
      
      Reviewers: bgamari, austin, goldfire
      
      Reviewed By: bgamari
      
      Subscribers: goldfire, rwbarton, thomie
      
      GHC Trac Issues: #13823
      
      Differential Revision: https://phabricator.haskell.org/D3823
      7d699782
    • Ryan Scott's avatar
      Don't suppress unimplemented type family warnings with DeriveAnyClass · 3f05e5f6
      Ryan Scott authored
      Summary:
      For some asinine reason, we were suppressing warnings when
      deriving associated type family instances with `DeriveAnyClass`. That seems
      like a bad idea. Let's not do that.
      
      Along the way, I noticed that the error contexts associated with these
      newly emitted warnings were less than ideal, so I did some minor refactoring
      to improve the story there.
      
      Fixes #14094
      
      Test Plan: ./validate
      
      Reviewers: bgamari, austin
      
      Subscribers: rwbarton, thomie
      
      GHC Trac Issues: #14094
      
      Differential Revision: https://phabricator.haskell.org/D3828
      3f05e5f6
    • Ryan Scott's avatar
      Split out inferConstraintsDataConArgs from inferConstraints · a4f347c2
      Ryan Scott authored
      Summary:
      Addresses point (1) of https://phabricator.haskell.org/D3337#107865.
      
      Before, `inferConstraints` awkwardly combined all of the logic needed to handle
      stock, newtype, and anyclass deriving. Really, though, the stock/newtype logic
      is quite different from the anyclass logic, so this splits off
      `inferConstraintsDataConArgs` (so named because it infers constraints by
      inspecting the types of the arguments to data constructors) from
      `inferConstraints` to handle the stock/newtype-specific bits.
      
      Aside from making the code somewhat clearer, this allows us to factor out
      superclass constraint inference, which is done regardless of deriving strategy.
      
      Test Plan: If it builds, ship it
      
      Reviewers: bgamari, austin
      
      Subscribers: rwbarton, thomie
      
      Differential Revision: https://phabricator.haskell.org/D3827
      a4f347c2
  2. 07 Aug, 2017 1 commit
  3. 06 Aug, 2017 3 commits
  4. 05 Aug, 2017 3 commits
    • Ryan Scott's avatar
      Don't warn when empty casing on Type · a267580e
      Ryan Scott authored
      Summary:
      `Type` (a.k.a. `TYPE LiftedRep`) can be used at the type level thanks
      to `TypeInType`. However, expressions like
      
      ```lang=haskell
      f :: Type -> Int
      f x = case x of {}
      ```
      
      were falsely claiming that the empty case on the value of type `Type` was
      non-exhaustive. The reason is a bit silly: `TYPE` is technically not an empty
      datatype in GHC's eyes, since it's a builtin, primitive type. To convince the
      pattern coverage checker otherwise, this adds a special case for `TYPE`.
      
      Test Plan: make test TEST=T14086
      
      Reviewers: gkaracha, austin, bgamari, goldfire
      
      Reviewed By: goldfire
      
      Subscribers: goldfire, rwbarton, thomie
      
      GHC Trac Issues: #14086
      
      Differential Revision: https://phabricator.haskell.org/D3819
      a267580e
    • Ryan Scott's avatar
      Remove the deprecated Typeable{1..7} type synonyms · a81b5b00
      Ryan Scott authored
      Summary:
      `Typeable{1..7}` (type synonyms for the poly-kinded `Typeable`) have
      been deprecated since GHC 7.8. They're now causing problems for users who try
      to still work with them in legacy code, since they can no longer be used in
      instances. To avoid this sort of confusion, let's just remove `Typeable{1..7}`
      altogether. Resolves #14047.
      
      Reviewers: bgamari, austin, hvr
      
      Reviewed By: bgamari
      
      Subscribers: rwbarton, thomie
      
      GHC Trac Issues: #14047
      
      Differential Revision: https://phabricator.haskell.org/D3817
      a81b5b00
    • Oleg Grenrus's avatar
      Add MonadIO Q - by requiring MonadIO => Quasi · 394c391a
      Oleg Grenrus authored
      Summary: This is follow-up to https://ghc.haskell.org/trac/ghc/ticket/10773
      
      Reviewers: austin, goldfire, bgamari, RyanGlScott
      
      Reviewed By: RyanGlScott
      
      Subscribers: RyanGlScott, rwbarton, thomie
      
      Differential Revision: https://phabricator.haskell.org/D3816
      394c391a
  5. 02 Aug, 2017 3 commits
  6. 01 Aug, 2017 9 commits
  7. 31 Jul, 2017 9 commits
    • Gabor Greif's avatar
      A bunch of typofixes · 2ef973e8
      Gabor Greif authored
      2ef973e8
    • Simon Peyton Jones's avatar
      Use field names for all uses of datacon Match · 4fdc5234
      Simon Peyton Jones authored
      This is refactoring only... elimiante all positional uses
      of the data constructor Match in favour of field names.
      
      No change in behaviour.
      4fdc5234
    • Simon Peyton Jones's avatar
      Remove redundant goop · 7f2dee8e
      Simon Peyton Jones authored
      See comment:22 in Trac #13594
      7f2dee8e
    • Simon Peyton Jones's avatar
      Reject top-level banged bindings · af89d687
      Simon Peyton Jones authored
      Bizarrely, we were not rejecting
        !x = e
      
      Fix:
      
      * In the test in DsBinds.dsTopLHsBinds, use isBangedHsBind, not
        isBangedPatBind.  (Indeed the latter dies altogther.)
      
      * Implement isBangedHsBind in HsUtils;
        be sure to handle AbsBinds
      
      All this was shown up by Trac #13594
      af89d687
    • Simon Peyton Jones's avatar
      Do a bit more CSE · 3ab342eb
      Simon Peyton Jones authored
      I discovered that in
      
         let x = MkT y in ....(MKT y |> co)....
      
      we weren't CSE'ing the (MkT y).  The fix is easy.
      3ab342eb
    • Simon Peyton Jones's avatar
      Improve the desugaring of -XStrict · 46368868
      Simon Peyton Jones authored
      Trac #14035 showed that -XStrict was generating some TERRIBLE
      desugarings, espcially for bindings with INLINE pragmas. Reason: with
      -XStrict, all AbsBinds (even for non-recursive functions) went via the
      general-case deguaring for AbsBinds, namely "generate a tuple and
      select from it", even though in this case there was only one variable
      in the tuple.  And that in turn interacts terribly badly with INLINE
      pragmas.
      
      This patch cleans things up:
      
      * I killed off AbsBindsSig completely, in favour of a boolean flag
        abs_sig in AbsBinds.  See Note [The abs_sig field of AbsBinds]
      
        This allowed me to delete lots of code; and instance-method
        declarations can enjoy the benefits too.  (They could have
        before, but no one had changed them to use AbsBindsSig.)
      
      * I refactored all the AbsBinds handling in DsBinds into a new
        function DsBinds.dsAbsBinds.  This allowed me to handle the
        strict case uniformly
      46368868
    • Simon Peyton Jones's avatar
      Refactoring around FunRhs · 2535a671
      Simon Peyton Jones authored
      * Clarify the comments around the mc_strictness field of FunRhs
      * Use record field names consistently for FunRhs
      2535a671
    • Richard Eisenberg's avatar
      Clarify comment about data family arities · c6d4219a
      Richard Eisenberg authored
      as requested in #14045.
      
      [skip ci] comments only
      c6d4219a
    • habibalamin's avatar
      Allow Windows to set blank environment variables · 49e334c8
      habibalamin authored
      Test Plan: ./validate on harbormaster
      
      Reviewers: austin, hvr, bgamari, erikd, Phyx
      
      Reviewed By: Phyx
      
      Subscribers: Phyx, rwbarton, thomie
      
      GHC Trac Issues: #12494
      
      Differential Revision: https://phabricator.haskell.org/D3726
      49e334c8
  8. 30 Jul, 2017 2 commits
  9. 29 Jul, 2017 4 commits
    • Ryan Scott's avatar
      Follow-up to #13887, for promoted infix constructors · 7089dc2f
      Ryan Scott authored
      Summary:
      Correct a couple more spots in the TH pretty-printer by applying the
      appropriate parenthesization for infix names. Fixes #13887 (again).
      
      Test Plan: make test TEST=T13887
      
      Reviewers: austin, bgamari
      
      Subscribers: rwbarton, thomie
      
      GHC Trac Issues: #13887
      
      Differential Revision: https://phabricator.haskell.org/D3802
      7089dc2f
    • Ryan Scott's avatar
      Add regression test for #14055 · f839b9de
      Ryan Scott authored
      f839b9de
    • Richard Eisenberg's avatar
      Fix #14045 by omitting an unnecessary check · d1ef223c
      Richard Eisenberg authored
      Previously, we checked the number of patterns in a data instances
      for all data families whose kind did not end in a kind variable.
      But, of course, undersaturating instances can happen even without
      the kind ending in a kind variable. So I've omitted the arity check.
      Data families aren't as particular about their arity as type families
      are (because data families can be undersaturated). Still, this change
      degrades error messages when instances don't have the right arity;
      now, instead of reporting a simple mismatch in the number of patterns,
      GHC reports kind errors. The new errors are fully accurate, but perhaps
      not as easy to work with. Still, with the new flexibility of allowing
      data family instances with varying numbers of patterns, I don't see
      a better way.
      
      This commit also improves source fidelity in some error messages,
      requiring more changes than really are necessary. But without these
      changes, error messages around mismatched associated instance heads
      were poor.
      
      test cases: indexed-types/should_compile/T14045,
                  indexed-types/should_fail/T14045a
      d1ef223c
    • Sven Tennie's avatar
      Add '<&>' operator to Data.Functor. '<&>' calls '<$>' with flipped arguments. · 9cfabbb5
      Sven Tennie authored
      This was proposed by David Feuer
      (https://mail.haskell.org/pipermail/libraries/2016-August/027293.html)
      and solves #14029.
      
      The implementation is a copy of the '<&>' operator in Control.Lens.Lens.
      
      Add tests for following Data.Functor operators: '<$>', '<&>', '<$' and '$>'.
      
      '<&>' was added for solving #14029. '<$>', '<$' and '$>' were probably
      untested.
      
      Reviewers: austin, hvr, bgamari, RyanGlScott
      
      Reviewed By: RyanGlScott
      
      Subscribers: RyanGlScott, rwbarton, thomie
      
      Differential Revision: https://phabricator.haskell.org/D3800
      9cfabbb5
  10. 28 Jul, 2017 3 commits