summaryrefslogtreecommitdiff
path: root/compiler/rename/RnSource.lhs
diff options
context:
space:
mode:
authorNicolas Frisby <nicolas.frisby@gmail.com>2013-08-22 15:00:41 -0500
committerNicolas Frisby <nicolas.frisby@gmail.com>2013-08-22 15:00:54 -0500
commit84f9927c1a04b8e35b97101771d8f6d625643d9b (patch)
tree050d7265a24fa1ff9aecc4081bb01bc444520587 /compiler/rename/RnSource.lhs
parent2eaf46fb1bb8c661c03f3e5e80622207ef2509d9 (diff)
parentc24be4b761df558d9edc9c0b1554bb558c261b14 (diff)
downloadhaskell-late-dmd.tar.gz
merged master into late-dmdlate-dmd
Diffstat (limited to 'compiler/rename/RnSource.lhs')
-rw-r--r--compiler/rename/RnSource.lhs30
1 files changed, 20 insertions, 10 deletions
diff --git a/compiler/rename/RnSource.lhs b/compiler/rename/RnSource.lhs
index cc410388df..e1236cac10 100644
--- a/compiler/rename/RnSource.lhs
+++ b/compiler/rename/RnSource.lhs
@@ -542,10 +542,9 @@ rnFamInstDecl doc mb_cls tycon pats payload rnPayload
rnTyFamInstDecl :: Maybe (Name, [Name])
-> TyFamInstDecl RdrName
-> RnM (TyFamInstDecl Name, FreeVars)
-rnTyFamInstDecl mb_cls (TyFamInstDecl { tfid_eqns = eqns, tfid_group = group })
- = do { (eqns', fvs) <- rnList (rnTyFamInstEqn mb_cls) eqns
- ; return (TyFamInstDecl { tfid_eqns = eqns'
- , tfid_group = group
+rnTyFamInstDecl mb_cls (TyFamInstDecl { tfid_eqn = L loc eqn })
+ = do { (eqn', fvs) <- rnTyFamInstEqn mb_cls eqn
+ ; return (TyFamInstDecl { tfid_eqn = L loc eqn'
, tfid_fvs = fvs }, fvs) }
rnTyFamInstEqn :: Maybe (Name, [Name])
@@ -1044,16 +1043,27 @@ rnFamDecl :: Maybe Name
-> FamilyDecl RdrName
-> RnM (FamilyDecl Name, FreeVars)
rnFamDecl mb_cls (FamilyDecl { fdLName = tycon, fdTyVars = tyvars
- , fdFlavour = flav, fdKindSig = kind })
- = bindHsTyVars fmly_doc mb_cls kvs tyvars $ \tyvars' ->
- do { tycon' <- lookupLocatedTopBndrRn tycon
- ; (kind', fv_kind) <- rnLHsMaybeKind fmly_doc kind
+ , fdInfo = info, fdKindSig = kind })
+ = do { ((tycon', tyvars', kind'), fv1) <-
+ bindHsTyVars fmly_doc mb_cls kvs tyvars $ \tyvars' ->
+ do { tycon' <- lookupLocatedTopBndrRn tycon
+ ; (kind', fv_kind) <- rnLHsMaybeKind fmly_doc kind
+ ; return ((tycon', tyvars', kind'), fv_kind) }
+ ; (info', fv2) <- rn_info info
; return (FamilyDecl { fdLName = tycon', fdTyVars = tyvars'
- , fdFlavour = flav, fdKindSig = kind' }
- , fv_kind ) }
+ , fdInfo = info', fdKindSig = kind' }
+ , fv1 `plusFV` fv2) }
where
fmly_doc = TyFamilyCtx tycon
kvs = extractRdrKindSigVars kind
+
+ rn_info (ClosedTypeFamily eqns)
+ = do { (eqns', fvs) <- rnList (rnTyFamInstEqn Nothing) eqns
+ -- no class context,
+ ; return (ClosedTypeFamily eqns', fvs) }
+ rn_info OpenTypeFamily = return (OpenTypeFamily, emptyFVs)
+ rn_info DataFamily = return (DataFamily, emptyFVs)
+
\end{code}
Note [Stupid theta]