- | isNewTyCon tc
- = do { cxt <- reifyCxt (tyConTheta tc)
- ; con <- reifyDataCon (head (tyConDataCons tc))
- ; return (TH.NewtypeD cxt (reifyName tc) (reifyTyVars (tyConTyVars tc))
- con [{- Don't know about deriving -}]) }
-
- | otherwise -- Algebraic
- = do { cxt <- reifyCxt (tyConTheta tc)
- ; cons <- mapM reifyDataCon (tyConDataCons tc)
- ; return (TH.DataD cxt (reifyName tc) (reifyTyVars (tyConTyVars tc))
- cons [{- Don't know about deriving -}]) }
+reifyTyCon tc
+ = case algTyConRhs tc of
+ NewTyCon data_con _ _
+ -> do { con <- reifyDataCon data_con
+ ; return (TH.NewtypeD [] (reifyName tc) (reifyTyVars (tyConTyVars tc))
+ con [{- Don't know about deriving -}]) }
+
+ DataTyCon mb_cxt cons _
+ -> do { cxt <- reifyCxt (mb_cxt `orElse` [])
+ ; cons <- mapM reifyDataCon (tyConDataCons tc)
+ ; return (TH.DataD cxt (reifyName tc) (reifyTyVars (tyConTyVars tc))
+ cons [{- Don't know about deriving -}]) }