[commit: ghc] master: Introduce DerivingVia (8ed8b03)

Repository : ssh://git@git.haskell.org/ghc On branch : master Link : http://ghc.haskell.org/trac/ghc/changeset/8ed8b037fee9611b1c4ef49adb6cf50bbd929a27/ghc >--------------------------------------------------------------- commit 8ed8b037fee9611b1c4ef49adb6cf50bbd929a27 Author: Ryan Scott <ryan.gl.scott at gmail.com> Date: Mon Jun 4 21:20:02 2018 -0400 Introduce DerivingVia This implements the `DerivingVia` proposal put forth in https://github.com/ghc-proposals/ghc-proposals/pull/120. This introduces the `DerivingVia` deriving strategy. This is a generalization of `GeneralizedNewtypeDeriving` that permits the user to specify the type to `coerce` from. The major change in this patch is the introduction of the `ViaStrategy` constructor to `DerivStrategy`, which takes a type as a field. As a result, `DerivStrategy` is no longer a simple enumeration type, but rather something that must be renamed and typechecked. The process by which this is done is explained more thoroughly in section 3 of this paper ( https://www.kosmikus.org/DerivingVia/deriving-via-paper.pdf ), although I have inlined the relevant parts into Notes where possible. There are some knock-on changes as well. I took the opportunity to do some refactoring of code in `TcDeriv`, especially the `mkNewTypeEqn` function, since it was bundling all of the logic for (1) deriving instances for newtypes and (2) `GeneralizedNewtypeDeriving` into one huge broth. `DerivingVia` reuses much of part (2), so that was factored out as much as possible. Bumps the Haddock submodule. Test Plan: ./validate Reviewers: simonpj, bgamari, goldfire, alanz Subscribers: alanz, goldfire, rwbarton, thomie, mpickering, carter GHC Trac Issues: #15178 Differential Revision: https://phabricator.haskell.org/D4684 >--------------------------------------------------------------- 8ed8b037fee9611b1c4ef49adb6cf50bbd929a27 compiler/basicTypes/BasicTypes.hs | 27 - compiler/deSugar/DsMeta.hs | 31 +- compiler/hsSyn/Convert.hs | 18 +- compiler/hsSyn/HsDecls.hs | 66 ++- compiler/hsSyn/HsExtension.hs | 8 + compiler/hsSyn/HsInstances.hs | 5 + compiler/main/DynFlags.hs | 3 + compiler/parser/ApiAnnotation.hs | 1 + compiler/parser/Lexer.x | 2 + compiler/parser/Parser.y | 89 ++-- compiler/prelude/THNames.hs | 47 +- compiler/rename/RnSource.hs | 158 +++++- compiler/typecheck/TcDeriv.hs | 572 ++++++++++++++------- compiler/typecheck/TcDerivUtils.hs | 97 ++-- compiler/typecheck/TcHsType.hs | 53 +- docs/users_guide/8.6.1-notes.rst | 8 + docs/users_guide/glasgow_exts.rst | 128 ++++- .../ghc-boot-th/GHC/LanguageExtensions/Type.hs | 1 + .../template-haskell/Language/Haskell/TH/Lib.hs | 23 +- .../Language/Haskell/TH/Lib/Internal.hs | 27 +- .../template-haskell/Language/Haskell/TH/Ppr.hs | 19 +- .../template-haskell/Language/Haskell/TH/Syntax.hs | 1 + libraries/template-haskell/changelog.md | 2 + testsuite/tests/deriving/should_compile/all.T | 2 + .../should_compile/deriving-via-compile.hs | 459 +++++++++++++++++ .../should_compile/deriving-via-standalone.hs | 41 ++ testsuite/tests/deriving/should_fail/all.T | 4 + .../deriving/should_fail/deriving-via-fail.hs | 19 + .../deriving/should_fail/deriving-via-fail.stderr | 16 + .../deriving/should_fail/deriving-via-fail2.hs | 7 + .../deriving/should_fail/deriving-via-fail2.stderr | 6 + .../deriving/should_fail/deriving-via-fail3.hs | 3 + .../deriving/should_fail/deriving-via-fail3.stderr | 4 + .../deriving/should_fail/deriving-via-fail4.hs | 17 + .../deriving/should_fail/deriving-via-fail4.stderr | 18 + testsuite/tests/driver/T4437.hs | 1 + testsuite/tests/ghc-api/annotations/T10312.stdout | 4 +- utils/haddock | 2 +- 38 files changed, 1608 insertions(+), 381 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 8ed8b037fee9611b1c4ef49adb6cf50bbd929a27