X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=compiler%2Frename%2FRnSource.lhs;h=79721cfdacdb2e911177a0cb0f5f3684c1a3f6bb;hp=bd9c549bb08be5f0da00cdbb42c96901c10af130;hb=5edf58c10a0144fa8b328e18d0b7fffec2319424;hpb=3afa01b9ff2006864e3ce4b4d960f0289a266ea2 diff --git a/compiler/rename/RnSource.lhs b/compiler/rename/RnSource.lhs index bd9c549..79721cf 100644 --- a/compiler/rename/RnSource.lhs +++ b/compiler/rename/RnSource.lhs @@ -593,18 +593,22 @@ rnConDecl (ConDecl name expl tvs cxt details res_ty) ; bindTyVarsRn doc tvs' $ \new_tyvars -> do { new_context <- rnContext doc cxt ; new_details <- rnConDetails doc details - ; new_res_ty <- rnConResult doc res_ty - ; let rv = ConDecl new_name expl new_tyvars new_context new_details new_res_ty - ; traceRn (text "****** - autrijus" <> ppr rv) - ; return rv } } + ; (new_details', new_res_ty) <- rnConResult doc new_details res_ty + ; return (ConDecl new_name expl new_tyvars new_context new_details' new_res_ty) }} where doc = text "In the definition of data constructor" <+> quotes (ppr name) get_rdr_tvs tys = extractHsRhoRdrTyVars cxt (noLoc (HsTupleTy Boxed tys)) -rnConResult _ ResTyH98 = return ResTyH98 -rnConResult doc (ResTyGADT ty) = do +rnConResult _ details ResTyH98 = return (details, ResTyH98) + +rnConResult doc details (ResTyGADT ty) = do ty' <- rnHsSigType doc ty - return $ ResTyGADT ty' + let (arg_tys, res_ty) = splitHsFunType ty' + -- We can split it up, now the renamer has dealt with fixities + case details of + PrefixCon _xs -> ASSERT( null _xs ) return (PrefixCon arg_tys, ResTyGADT res_ty) + RecCon fields -> return (details, ResTyGADT ty') + InfixCon {} -> panic "rnConResult" rnConDetails doc (PrefixCon tys) = mappM (rnLHsType doc) tys `thenM` \ new_tys ->