X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Fparser%2FRdrHsSyn.lhs;h=3ca1b29bf34fd2250b2a3665d417244dec272a9a;hb=1a660e030bd3aaaa34adfea77d72856cdb48479e;hp=187d64d8802f09fb602bf004846fbd2f097140a6;hpb=6c06fdc7ad20682f0f52b5a78e5e3487a2ed047b;p=ghc-hetmet.git diff --git a/compiler/parser/RdrHsSyn.lhs b/compiler/parser/RdrHsSyn.lhs index 187d64d..3ca1b29 100644 --- a/compiler/parser/RdrHsSyn.lhs +++ b/compiler/parser/RdrHsSyn.lhs @@ -28,7 +28,7 @@ module RdrHsSyn ( -- -> (FastString, RdrName, RdrNameHsType) -- -> P RdrNameHsDecl mkExtName, -- RdrName -> CLabelString - mkGadtDecl, -- Located RdrName -> LHsType RdrName -> ConDecl RdrName + mkGadtDecl, -- [Located RdrName] -> LHsType RdrName -> ConDecl RdrName -- Bunch of functions in the parser monad for -- checking and constructing values @@ -813,11 +813,19 @@ checkValSig (L l (HsVar v)) ty checkValSig (L l _) _ = parseError l "Invalid type signature" -mkGadtDecl :: Located RdrName +mkGadtDecl :: [Located RdrName] -> LHsType RdrName -- assuming HsType - -> ConDecl RdrName -mkGadtDecl name (L _ (HsForAllTy _ qvars cxt ty)) = mk_gadt_con name qvars cxt ty -mkGadtDecl name ty = mk_gadt_con name [] (noLoc []) ty + -> [ConDecl RdrName] +-- We allow C,D :: ty +-- and expand it as if it had been +-- C :: ty; D :: ty +-- (Just like type signatures in general.) +mkGadtDecl names ty + = [mk_gadt_con name qvars cxt tau | name <- names] + where + (qvars,cxt,tau) = case ty of + L _ (HsForAllTy _ qvars cxt tau) -> (qvars, cxt, tau) + _ -> ([], noLoc [], ty) mk_gadt_con :: Located RdrName -> [LHsTyVarBndr RdrName]