Commit f1d2db68 authored by Ryan Scott's avatar Ryan Scott
Browse files

Fix #14320 by looking through HsParTy in more places

Summary:
GHC was needlessly rejecting GADT constructors' type
signatures that were surrounded in parentheses due to the fact that
`splitLHsForAllTy` and `splitLHsQualTy` (which are used to check as
part of checking if GADT constructor return types are correct)
weren't looking through parentheses (i.e., `HsParTy`). This is
easily fixed, though.

Test Plan: make test TEST=T14320

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie

GHC Trac Issues: #14320

Differential Revision: https://phabricator.haskell.org/D4072
parent 341d3a78
......@@ -1053,11 +1053,13 @@ splitLHsSigmaTy ty
splitLHsForAllTy :: LHsType pass -> ([LHsTyVarBndr pass], LHsType pass)
splitLHsForAllTy (L _ (HsForAllTy { hst_bndrs = tvs, hst_body = body })) = (tvs, body)
splitLHsForAllTy body = ([], body)
splitLHsForAllTy (L _ (HsParTy t)) = splitLHsForAllTy t
splitLHsForAllTy body = ([], body)
splitLHsQualTy :: LHsType pass -> (LHsContext pass, LHsType pass)
splitLHsQualTy (L _ (HsQualTy { hst_ctxt = ctxt, hst_body = body })) = (ctxt, body)
splitLHsQualTy body = (noLoc [], body)
splitLHsQualTy (L _ (HsParTy t)) = splitLHsQualTy t
splitLHsQualTy body = (noLoc [], body)
splitLHsInstDeclTy :: LHsSigType GhcRn
-> ([Name], LHsContext GhcRn, LHsType GhcRn)
......
{-# LANGUAGE RankNTypes, GADTs, KindSignatures #-}
module T14320
where
data Exp :: * where
Lit :: (Int -> Exp)
newtype TypedExp :: * -> * where
TEGood :: forall a . (Exp -> (TypedExp a))
-- The only difference here is that the type is wrapped in parentheses,
-- but GHC 8.0.1 rejects this program
--
newtype TypedExpToo :: * -> * where
TEBad :: (forall a . (Exp -> (TypedExpToo a)))
......@@ -114,3 +114,4 @@ test('T9096', normal, compile, [''])
test('T9380', normal, compile_and_run, [''])
test('T12087', normal, compile_fail, [''])
test('T12468', normal, compile_fail, [''])
test('T14320', normal, compile, [''])
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment