-tcConDecl unbox_strict NewType tycon tc_tvs -- Newtypes
- (ConDecl name _ ex_tvs ex_ctxt details ResTyH98 _)
- = do { 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
- [arg_ty']
- tycon }
-
- -- Check that a newtype has no existential stuff
- ; checkTc (null ex_tvs && null (unLoc ex_ctxt)) (newtypeExError name)
-
- ; case details of
- PrefixCon [arg_ty] -> tc_datacon [] arg_ty
- RecCon [HsRecField field_lbl arg_ty _] -> tc_datacon [field_lbl] arg_ty
- other ->
- failWithTc (newtypeFieldErr name (length (hsConArgs details)))
- -- Check that the constructor has exactly one field
- }
-
-tcConDecl unbox_strict DataType tycon tc_tvs -- Data types