[commit: haddock] data-kind-syntax: Handle data kind syntax changes (a92c866)

git at git.haskell.org git at git.haskell.org
Mon Sep 9 19:28:29 CEST 2013


Repository : ssh://git@git.haskell.org/haddock

On branch  : data-kind-syntax
Link       : http://git.haskell.org/?p=haddock.git;a=commit;h=a92c8663bee3a486c19f0e124898f254e9991425

>---------------------------------------------------------------

commit a92c8663bee3a486c19f0e124898f254e9991425
Author: Trevor Elliott <trevor at galois.com>
Date:   Sun Sep 8 21:43:57 2013 -0700

    Handle data kind syntax changes


>---------------------------------------------------------------

a92c8663bee3a486c19f0e124898f254e9991425
 src/Haddock/Convert.hs          |   14 ++++++++++++--
 src/Haddock/Interface/Rename.hs |   30 +++++++++++++++++++++++++++---
 2 files changed, 39 insertions(+), 5 deletions(-)

diff --git a/src/Haddock/Convert.hs b/src/Haddock/Convert.hs
index 04acbc9..2e13f2c 100644
--- a/src/Haddock/Convert.hs
+++ b/src/Haddock/Convert.hs
@@ -114,6 +114,13 @@ synifyAxiom ax@(CoAxiom { co_ax_tc = tc })
   | otherwise
   = error "synifyAxiom: closed/open family confusion"
 
+tryPromote :: TyCon -> Bool
+tryPromote tc =
+  case promotableTyConInfo tc of
+    -- False when promotion was explicitly disabled, true otherwise.
+    NeverPromote -> False
+    _            -> True
+
 synifyTyCon :: TyCon -> TyClDecl Name
 synifyTyCon tc
   | isFunTyCon tc || isPrimTyCon tc 
@@ -135,7 +142,8 @@ synifyTyCon tc
                                       , dd_kindSig = Just (synifyKindSig (tyConKind tc))
                                                -- we have their kind accurately:
                                       , dd_cons = []  -- No constructors
-                                      , dd_derivs = Nothing }
+                                      , dd_derivs = Nothing
+                                      , dd_try_promote = tryPromote tc }
            , tcdFVs = placeHolderNames }
 
   | isSynFamilyTyCon tc 
@@ -200,7 +208,9 @@ synifyTyCon tc
                     , dd_cType   = Nothing
                     , dd_kindSig = fmap synifyKindSig kindSig
                     , dd_cons    = cons 
-                    , dd_derivs  = alg_deriv }
+                    , dd_derivs  = alg_deriv
+                    , dd_try_promote = tryPromote tc
+                    }
  in DataDecl { tcdLName = name, tcdTyVars = tyvars, tcdDataDefn = defn
              , tcdFVs = placeHolderNames }
 
diff --git a/src/Haddock/Interface/Rename.hs b/src/Haddock/Interface/Rename.hs
index a6f4852..5f684fe 100644
--- a/src/Haddock/Interface/Rename.hs
+++ b/src/Haddock/Interface/Rename.hs
@@ -369,6 +369,13 @@ renameTyClD d = case d of
                       , tcdFDs = lfundeps', tcdSigs = lsigs', tcdMeths= emptyBag
                       , tcdATs = ats', tcdATDefs = at_defs', tcdDocs = [], tcdFVs = placeHolderNames })
 
+  KindDecl { tcdLName = lname, tcdKVars = lkvars, tcdTypeCons = lcons } -> do
+    lname'  <- renameL lname
+    lkvars' <- mapM renameL lkvars
+    lcons'  <- mapM (renameLThing renameTyConDecl) lcons
+    return KindDecl { tcdLName = lname', tcdKVars = lkvars', tcdTypeCons = lcons'
+                    , tcdFvs = placeHolderNames }
+
   where
     renameLFunDep (L loc (xs, ys)) = do
       xs' <- mapM rename xs
@@ -377,6 +384,22 @@ renameTyClD d = case d of
 
     renameLSig (L loc sig) = return . L loc =<< renameSig sig
 
+renameTyConDecl :: TyConDecl Name -> RnM (TyConDecl DocName)
+renameTyConDecl (TyConDecl { tycon_name = lname, tycon_details = details, tycon_doc = doc }) = do
+  lname'   <- renameL lname
+  details' <- renameDetails details
+  doc'     <- mapM renameLDocHsSyn doc
+  return TyConDecl { tycon_name = lname', tycon_details = details'
+                   , tycon_doc = doc' }
+
+  where
+  renameDetails (RecCon ()) = return (RecCon ())
+  renameDetails (PrefixCon ps) = return . PrefixCon =<< mapM renameLType ps
+  renameDetails (InfixCon a b) = do
+    a' <- renameLType a
+    b' <- renameLType b
+    return (InfixCon a' b')
+
 renameFamilyDecl :: FamilyDecl Name -> RnM (FamilyDecl DocName)
 renameFamilyDecl (FamilyDecl { fdInfo = info, fdLName = lname
                              , fdTyVars = ltyvars, fdKindSig = tckind }) = do
@@ -396,13 +419,15 @@ renameFamilyInfo (ClosedTypeFamily eqns)
 
 renameDataDefn :: HsDataDefn Name -> RnM (HsDataDefn DocName)
 renameDataDefn (HsDataDefn { dd_ND = nd, dd_ctxt = lcontext, dd_cType = cType
-                           , dd_kindSig = k, dd_cons = cons }) = do
+                           , dd_kindSig = k, dd_cons = cons
+                           , dd_try_promote = try_prom }) = do
     lcontext' <- renameLContext lcontext
     k'        <- renameMaybeLKind k
     cons'     <- mapM (mapM renameCon) cons
     -- I don't think we need the derivings, so we return Nothing
     return (HsDataDefn { dd_ND = nd, dd_ctxt = lcontext', dd_cType = cType
-                       , dd_kindSig = k', dd_cons = cons', dd_derivs = Nothing })
+                       , dd_kindSig = k', dd_cons = cons', dd_derivs = Nothing
+                       , dd_try_promote = try_prom })
 
 renameCon :: ConDecl Name -> RnM (ConDecl DocName)
 renameCon decl@(ConDecl { con_name = lname, con_qvars = ltyvars
@@ -427,7 +452,6 @@ renameCon decl@(ConDecl { con_name = lname, con_qvars = ltyvars
     renameResType (ResTyH98) = return ResTyH98
     renameResType (ResTyGADT t) = return . ResTyGADT =<< renameLType t
 
-
 renameConDeclFieldField :: ConDeclField Name -> RnM (ConDeclField DocName)
 renameConDeclFieldField (ConDeclField name t doc) = do
   name' <- renameL name





More information about the ghc-commits mailing list