where
tdef | isNewTyCon tcon =
C.Newtype (make_con_qid (tyConName tcon)) (map make_tbind tyvars) repclause
- | null (tyConDataCons tcon) = error "MkExternalCore died: can't handle datatype declarations with no data constructors"
+-- 20060420 GHC handles empty data types just fine. ExtCore should too! jds
+-- | null (tyConDataCons tcon) = error "MkExternalCore died: can't handle datatype declarations with no data constructors"
| otherwise =
C.Data (make_con_qid (tyConName tcon)) (map make_tbind tyvars) (map make_cdef (tyConDataCons tcon))
where repclause | isRecursiveTyCon tcon = Nothing
| tdef ';' tdefs {$1:$3}
tdef :: { TyClDecl RdrName }
- : '%data' q_tc_name tv_bndrs '=' '{' cons1 '}'
+ : '%data' q_tc_name tv_bndrs '=' '{' cons '}'
{ mkTyData DataType (noLoc [], noLoc (ifaceExtRdrName $2), map toHsTvBndr $3) Nothing $6 Nothing }
| '%newtype' q_tc_name tv_bndrs trep
{ let tc_rdr = ifaceExtRdrName $2 in
in [noLoc $ ConDecl (noLoc dc_name) Explicit []
(noLoc []) con_info ResTyH98]) }
-cons1 :: { [LConDecl RdrName] }
- : con { [$1] }
- | con ';' cons1 { $1:$3 }
+cons :: { [LConDecl RdrName] }
+ : {- empty -} { [] } -- 20060420 Empty data types allowed. jds
+ | con ';' cons { $1:$3 }
con :: { LConDecl RdrName }
: d_pat_occ attv_bndrs hs_atys