Commit cd2c71bb authored by simonpj@microsoft.com's avatar simonpj@microsoft.com

Allow GADT syntax for newtypes

Fixes Trac #1154.   Please merge.
Tests are tc225, and tcfail176.
parent 479f4cac
......@@ -748,19 +748,22 @@ tcConDecl :: Bool -- True <=> -funbox-strict_fields
-> TcM DataCon
tcConDecl unbox_strict NewType tycon tc_tvs -- Newtypes
(ConDecl name _ ex_tvs ex_ctxt details ResTyH98 _)
= do { let tc_datacon field_lbls arg_ty
(ConDecl name _ tvs ex_ctxt details res_ty _)
= tcTyVarBndrs tvs $ \ tvs' -> do
do { (univ_tvs, ex_tvs, eq_preds, data_tc) <- tcResultType tycon tc_tvs tvs' res_ty
-- Check that a newtype has no existential stuff
; checkTc (null ex_tvs && null (unLoc ex_ctxt)) (newtypeExError name)
; let tc_datacon field_lbls arg_ty
= do { arg_ty' <- tcHsKindedType arg_ty -- No bang on newtype
; buildDataCon (unLoc name) False {- Prefix -}
[NotMarkedStrict]
(map unLoc field_lbls)
tc_tvs [] -- No existentials
[] [] -- No equalities, predicates
univ_tvs [] -- No existentials
[] [] -- No equalities, predicates
[arg_ty']
tycon }
-- Check that a newtype has no existential stuff
; checkTc (null ex_tvs && null (unLoc ex_ctxt)) (newtypeExError name)
data_tc }
; case details of
PrefixCon [arg_ty] -> tc_datacon [] arg_ty
......
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