Commit 923ee9d3 authored by simonpj@microsoft.com's avatar simonpj@microsoft.com
Browse files

Reject newtypes with strictness annotations; fixes read008

This used to be a parse error, but ! annotations are now handled
further downstream in the compiler, and I'd forgotten to check
that newtypes do not have strictness annotations.

The test read008 is technically in the wrong place (it's a typechecker
test now) but that doesn't matter
parent 006bb4c1
......@@ -1008,6 +1008,8 @@ checkNewDataCon con
-- Return type is (T a b c)
; checkTc (null ex_tvs && null theta) (newtypeExError con)
-- No existentials
; checkTc (null (dataConStrictMarks con)) (newtypeStrictError con)
-- No strictness
}
where
(_univ_tvs, ex_tvs, eq_spec, theta, arg_tys, _res_ty) = dataConFullSig con
......@@ -1152,6 +1154,10 @@ newtypeExError con
= sep [ptext SLIT("A newtype constructor cannot have an existential context,"),
nest 2 $ ptext SLIT("but") <+> quotes (ppr con) <+> ptext SLIT("does")]
newtypeStrictError con
= sep [ptext SLIT("A newtype constructor cannot have a strictness annotation,"),
nest 2 $ ptext SLIT("but") <+> quotes (ppr con) <+> ptext SLIT("does")]
newtypePredError con
= sep [ptext SLIT("A newtype constructor must have a return type of form T a1 ... an"),
nest 2 $ ptext SLIT("but") <+> quotes (ppr con) <+> ptext SLIT("does not")]
......
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