#15178 closed feature request (fixed)

Implement DerivingVia

Reported by: RyanGlScott Owned by: RyanGlScott
Priority: normal Milestone: 8.6.1
Component: Compiler Version: 8.5
Keywords: deriving, GHCProposal Cc: kosmikus, Iceland_jack
Operating System: Unknown/Multiple Architecture: Unknown/Multiple
Type of failure: None/Unknown Test Case: deriving/should_fail/deriving-via-fail{,2,3,4}, deriving/should_compile/deriving-via-compile, deriving/should_compile/deriving-via-standalone
Blocked By: Blocking:
Related Tickets: Differential Rev(s): Phab:D4684
Wiki Page:

Description

The DerivingVia GHC proposal has been accepted. This ticket serves as a reminder to get the corresponding patch into GHC.

Change History (5)

comment:1 Changed 16 months ago by RyanGlScott

Differential Rev(s): Phab:D4684
Owner: set to RyanGlScott

comment:2 Changed 16 months ago by RyanGlScott

Status: newpatch

comment:3 Changed 16 months ago by RyanGlScott

Keywords: GHCProposal added

comment:4 Changed 16 months ago by Ben Gamari <ben@…>

In 8ed8b03/ghc:

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

comment:5 Changed 16 months ago by RyanGlScott

Resolution: fixed
Status: patchclosed
Test Case: deriving/should_fail/deriving-via-fail{,2,3,4}, deriving/should_compile/deriving-via-compile, deriving/should_compile/deriving-via-standalone
Note: See TracTickets for help on using tickets.