Skip to content
Snippets Groups Projects
  1. Aug 12, 2020
  2. Aug 11, 2020
  3. Aug 10, 2020
  4. Aug 09, 2020
  5. Aug 08, 2020
  6. Aug 07, 2020
  7. Aug 06, 2020
    • Takenobu Tani's avatar
      users-guide: Rename 8.12 to 9.0 · 9570c212
      Takenobu Tani authored and Ben Gamari's avatar Ben Gamari committed
      GHC 8.12.1 has been renamed to GHC 9.0.1.
      
      See also:
        https://mail.haskell.org/pipermail/ghc-devs/2020-July/019083.html
      
      [skip ci]
      9570c212
    • Sylvain Henry's avatar
      Use a type alias for Ways · 63348155
      Sylvain Henry authored and Marge Bot's avatar Marge Bot committed
      63348155
    • Richard Eisenberg's avatar
      Fail eagerly on a lev-poly datacon arg · d2a43225
      Richard Eisenberg authored and Marge Bot's avatar Marge Bot committed
      Close #18534.
      
      See commentary in the patch.
      d2a43225
    • Vladislav Zavialov's avatar
      Fix visible forall in ppr_ty (#18522) · 0ddb4384
      Vladislav Zavialov authored and Marge Bot's avatar Marge Bot committed
      Before this patch, this type:
        T :: forall k -> (k ~ k) => forall j -> k -> j -> Type
      was printed incorrectly as:
        T :: forall k j -> (k ~ k) => k -> j -> Type
      0ddb4384
    • Vladislav Zavialov's avatar
      Fix debug_ppr_ty ForAllTy (#18522) · 826d07db
      Vladislav Zavialov authored and Marge Bot's avatar Marge Bot committed
      Before this change, GHC would
      pretty-print   forall k. forall a -> ()
                as   forall @k a. ()
      which isn't even valid Haskell.
      826d07db
    • Vladislav Zavialov's avatar
      Clean up the story around runPV/runECP_P/runECP_PV · 6770e199
      Vladislav Zavialov authored and Marge Bot's avatar Marge Bot committed
      This patch started as a small documentation change, an attempt to make
      Note [Parser-Validator] and Note [Ambiguous syntactic categories]
      more clear and up-to-date.
      
      But it turned out that runECP_P/runECP_PV are weakly motivated,
      and it's easier to remove them than to find a good rationale/explanation
      for their existence.
      
      As the result, there's a bit of refactoring in addition to
      a documentation update.
      6770e199
    • Vladislav Zavialov's avatar
      Grammar for types and data/newtype constructors · 686e06c5
      Vladislav Zavialov authored and Marge Bot's avatar Marge Bot committed
      Before this patch, we parsed types into a reversed sequence
      of operators and operands. For example, (F x y + G a b * X)
      would be parsed as [X, *, b, a, G, +, y, x, F],
      using a simple grammar:
      
      	tyapps
      	  : tyapp
      	  | tyapps tyapp
      
      	tyapp
      	  : atype
      	  | PREFIX_AT atype
      	  | tyop
      	  | unpackedness
      
      Then we used a hand-written state machine to assemble this
       either into a type,        using 'mergeOps',
           or into a constructor, using 'mergeDataCon'.
      
      This is due to a syntactic ambiguity:
      
      	data T1 a =          MkT1 a
      	data T2 a = Ord a => MkT2 a
      
      In T1, what follows after the = sign is a data/newtype constructor
      declaration. However, in T2, what follows is a type (of kind
      Constraint). We don't know which of the two we are parsing until we
      encounter =>, and we cannot check for => without unlimited lookahead.
      
      This poses a few issues when it comes to e.g. infix operators:
      
      	data I1 = Int :+ Bool :+ Char          -- bad
      	data I2 = Int :+ Bool :+ Char => MkI2  -- fine
      
      By this issue alone we are forced into parsing into an intermediate
      representation and doing a separate validation pass.
      
      However, should that intermediate representation be as low-level as a
      flat sequence of operators and operands?
      
      Before GHC Proposal #229, the answer was Yes, due to some particularly
      nasty corner cases:
      
      	data T = ! A :+ ! B          -- used to be fine, hard to parse
      	data T = ! A :+ ! B => MkT   -- bad
      
      However, now the answer is No, as this corner case is gone:
      
      	data T = ! A :+ ! B          -- bad
      	data T = ! A :+ ! B => MkT   -- bad
      
      This means we can write a proper grammar for types, overloading it in
      the DisambECP style, see Note [Ambiguous syntactic categories].
      
      With this patch, we introduce a new class, DisambTD. Just like
      DisambECP is used to disambiguate between expressions, commands, and patterns,
      DisambTD  is used to disambiguate between types and data/newtype constructors.
      
      This way, we get a proper, declarative grammar for constructors and
      types:
      
      	infixtype
      	  : ftype
      	  | ftype tyop infixtype
      	  | unpackedness infixtype
      
      	ftype
      	  : atype
      	  | tyop
      	  | ftype tyarg
      	  | ftype PREFIX_AT tyarg
      
      	tyarg
      	  : atype
      	  | unpackedness atype
      
      And having a grammar for types means we are a step closer to using a
      single grammar for types and expressions.
      686e06c5
  8. Aug 05, 2020
  9. Aug 03, 2020
    • Alex Biehl's avatar
      ef2ae81a
    • Niklas Hambüchen's avatar
      hadrian: Fix running stage0/bin/ghc with wrong package DB. Fixes #17468. · 947206f4
      Niklas Hambüchen authored
      In the invocation of `cabal configure`, `--ghc-pkg-option=--global-package-db`
      was already given correctly to tell `stage0/bin/ghc-pkg` that it should use
      the package DB in `stage1/`.
      
      However, `ghc` needs to be given this information as well, not only `ghc-pkg`!
      Until now that was not the case; the package DB in `stage0` was given to
      `ghc` instead.
      This was wrong, because there is no binary compatibility guarantee that says
      that the `stage0` DB's `package.cache` (which is written by the
      stage0 == system-provided ghc-pkg) can be deserialised by the `ghc-pkg`
      from the source code tree.
      
      As a result, when trying to add fields to `InstalledPackageInfo` that get
      serialised into / deserialised from the `package.cache`, errors like
      
          _build/stage0/lib/package.conf.d/package.cache: GHC.PackageDb.readPackageDb: inappropriate type (Not a valid Unicode code point!)
      
      would appear. This was because the `stage0/bin/ghc would try to
      deserialise the newly added fields from
      `_build/stage0/lib/package.conf.d/package.cache`, but they were not in there
      because the system `ghc-pkg` doesn't know about them and thus didn't write them
      there.
      It would try to do that because any GHC by default tries to read the global
      package db in `../lib/package.conf.d/package.cache`.
      For `stage0/bin/ghc` that *can never work* as explained above, so we
      must disable this default via `-no-global-package-db` and give it the
      correct package DB explicitly.
      
      This is the same problem as #16534, and the same fix as in MR !780
      (but in another context; that one was for developers trying out the
      `stage0/bin/ghc` == `_build/ghc-stage1` interactively, while this fix
      is for a `cabal configure` invocation).
      
      I also noticed that the fix for #16534 forgot to pass `-no-global-package-db`,
      and have fixed that in this commit as well.
      It only worked until now because nobody tried to add a new ghc-pkg `.conf`
      field since the introduction of Hadrian.
      947206f4
  10. Aug 02, 2020
  11. Aug 01, 2020
Loading