diff options
author | Ryan Scott <ryan.gl.scott@gmail.com> | 2018-03-02 14:18:15 -0500 |
---|---|---|
committer | Ben Gamari <ben@smart-cactus.org> | 2018-03-02 15:41:03 -0500 |
commit | aef2b429072e3d3bbdbcb9e4082a0d86ba329d9e (patch) | |
tree | fe568bb82457e5303f2274cac8521bdc51bb7b3a | |
parent | 125d15181c7ac8d8fbaa43f799f9e3876dc2f57b (diff) | |
download | haskell-aef2b429072e3d3bbdbcb9e4082a0d86ba329d9e.tar.gz |
Fix #14817 by not double-printing data family instance kind signatures
Within `pprDataFamInstDecl`, we were invoking `pprFamInstLHS` to
pretty-print a data family instance header, and we were passing `Just` a
kind signature to `pprFamInstLHS` to make it pretty-print the kind
signature alongside it (this is a consequence of commit
d1ef223cfebd23c25489a4b0c67fbaa2f91c1ec6). But this is silly, because
then invoke `pp_data_defn`, which //also// pretty-prints the kind
signature, resulting in the kind signature being printed twice by
mistake.
This fix is simple—pass `Nothing` to `pprFamInstLHS` instead.
Test Plan: make test TEST=T14817
Reviewers: alanz, bgamari, mpickering
Reviewed By: mpickering
Subscribers: mpickering, rwbarton, thomie, carter
GHC Trac Issues: #14817
Differential Revision: https://phabricator.haskell.org/D4418
-rw-r--r-- | compiler/hsSyn/HsDecls.hs | 5 | ||||
-rw-r--r-- | testsuite/tests/th/T14817.hs | 6 | ||||
-rw-r--r-- | testsuite/tests/th/T14817.stderr | 7 | ||||
-rw-r--r-- | testsuite/tests/th/all.T | 1 |
4 files changed, 18 insertions, 1 deletions
diff --git a/compiler/hsSyn/HsDecls.hs b/compiler/hsSyn/HsDecls.hs index 8078582fe3..475e31ea57 100644 --- a/compiler/hsSyn/HsDecls.hs +++ b/compiler/hsSyn/HsDecls.hs @@ -1555,7 +1555,10 @@ pprDataFamInstDecl top_lvl (DataFamInstDecl { dfid_eqn = HsIB { hsib_body = = pp_data_defn pp_hdr defn where pp_hdr ctxt = ppr_instance_keyword top_lvl - <+> pprFamInstLHS tycon pats fixity ctxt (dd_kindSig defn) + <+> pprFamInstLHS tycon pats fixity ctxt Nothing + -- No need to pass an explicit kind signature to + -- pprFamInstLHS here, since pp_data_defn already + -- pretty-prints that. See #14817. pprDataFamInstFlavour :: DataFamInstDecl pass -> SDoc pprDataFamInstFlavour (DataFamInstDecl { dfid_eqn = HsIB { hsib_body = diff --git a/testsuite/tests/th/T14817.hs b/testsuite/tests/th/T14817.hs new file mode 100644 index 0000000000..1019decb61 --- /dev/null +++ b/testsuite/tests/th/T14817.hs @@ -0,0 +1,6 @@ +{-# LANGUAGE TemplateHaskell #-} +{-# LANGUAGE TypeFamilies #-} +module T14817 where + +$([d| data family Foo :: * + data instance Foo :: * |]) diff --git a/testsuite/tests/th/T14817.stderr b/testsuite/tests/th/T14817.stderr new file mode 100644 index 0000000000..7c63763bae --- /dev/null +++ b/testsuite/tests/th/T14817.stderr @@ -0,0 +1,7 @@ +T14817.hs:(5,3)-(6,31): Splicing declarations + [d| data family Foo :: * + + data instance Foo :: * |] + ======> + data family Foo :: GHC.Types.Type + data instance Foo :: GHC.Types.Type diff --git a/testsuite/tests/th/all.T b/testsuite/tests/th/all.T index 41567162e8..7305800880 100644 --- a/testsuite/tests/th/all.T +++ b/testsuite/tests/th/all.T @@ -399,3 +399,4 @@ test('T14204', normal, compile_fail, ['-v0']) test('T14060', normal, compile_and_run, ['-v0']) test('T14646', normal, compile, ['-v0 -ddump-splices -dsuppress-uniques']) test('T14681', normal, compile, ['-v0 -ddump-splices -dsuppress-uniques']) +test('T14817', normal, compile, ['-v0 -ddump-splices -dsuppress-uniques']) |