diff options
Diffstat (limited to 'haddock-api/src/Haddock/Types.hs')
-rw-r--r-- | haddock-api/src/Haddock/Types.hs | 106 |
1 files changed, 75 insertions, 31 deletions
diff --git a/haddock-api/src/Haddock/Types.hs b/haddock-api/src/Haddock/Types.hs index 83c9dd72..5c6f09a3 100644 --- a/haddock-api/src/Haddock/Types.hs +++ b/haddock-api/src/Haddock/Types.hs @@ -1,4 +1,5 @@ {-# LANGUAGE CPP, DeriveDataTypeable, DeriveFunctor, DeriveFoldable, DeriveTraversable, StandaloneDeriving, TypeFamilies, RecordWildCards #-} +{-# LANGUAGE ConstraintKinds #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE PartialTypeSignatures #-} {-# LANGUAGE UndecidableInstances #-} -- Note [Pass sensitive types] @@ -46,6 +47,7 @@ import Data.Void (Void) import Documentation.Haddock.Types import GHC.Types.Basic (PromotionFlag(..)) import GHC.Types.Fixity (Fixity(..)) +import GHC.Types.Var (Specificity) import GHC import GHC.Driver.Session (Language) @@ -406,13 +408,13 @@ instance (OutputableBndrId p) -- 'PseudoFamilyDecl' type is introduced. data PseudoFamilyDecl name = PseudoFamilyDecl { pfdInfo :: FamilyInfo name - , pfdLName :: Located (IdP name) + , pfdLName :: LocatedN (IdP name) , pfdTyVars :: [LHsType name] , pfdKindSig :: LFamilyResultSig name } -mkPseudoFamilyDecl :: FamilyDecl (GhcPass p) -> PseudoFamilyDecl (GhcPass p) +mkPseudoFamilyDecl :: FamilyDecl GhcRn -> PseudoFamilyDecl GhcRn mkPseudoFamilyDecl (FamilyDecl { .. }) = PseudoFamilyDecl { pfdInfo = fdInfo , pfdLName = fdLName @@ -420,12 +422,12 @@ mkPseudoFamilyDecl (FamilyDecl { .. }) = PseudoFamilyDecl , pfdKindSig = fdResultSig } where - mkType :: HsTyVarBndr flag (GhcPass p) -> HsType (GhcPass p) + mkType :: HsTyVarBndr flag GhcRn -> HsType GhcRn mkType (KindedTyVar _ _ (L loc name) lkind) = - HsKindSig noExtField tvar lkind + HsKindSig noAnn tvar lkind where - tvar = L loc (HsTyVar noExtField NotPromoted (L loc name)) - mkType (UserTyVar _ _ name) = HsTyVar noExtField NotPromoted name + tvar = L (na2la loc) (HsTyVar noAnn NotPromoted (L loc name)) + mkType (UserTyVar _ _ name) = HsTyVar noAnn NotPromoted name -- | An instance head that may have documentation and a source location. @@ -694,36 +696,69 @@ liftErrMsg = writer . runWriter -- * Pass sensitive types ----------------------------------------------------------------------------- -type instance XRec DocNameI a = Located a +type instance XRec DocNameI a = GenLocated (Anno a) a instance UnXRec DocNameI where unXRec = unLoc instance MapXRec DocNameI where mapXRec = fmap -instance WrapXRec DocNameI where - wrapXRec = noLoc - -type instance XForAllTy DocNameI = NoExtField -type instance XQualTy DocNameI = NoExtField -type instance XTyVar DocNameI = NoExtField -type instance XStarTy DocNameI = NoExtField -type instance XAppTy DocNameI = NoExtField -type instance XAppKindTy DocNameI = NoExtField -type instance XFunTy DocNameI = NoExtField -type instance XListTy DocNameI = NoExtField -type instance XTupleTy DocNameI = NoExtField -type instance XSumTy DocNameI = NoExtField -type instance XOpTy DocNameI = NoExtField -type instance XParTy DocNameI = NoExtField -type instance XIParamTy DocNameI = NoExtField -type instance XKindSig DocNameI = NoExtField +instance WrapXRec DocNameI (HsType DocNameI) where + wrapXRec = noLocA + +type instance Anno DocName = SrcSpanAnnN +type instance Anno (HsTyVarBndr flag DocNameI) = SrcSpanAnnA +type instance Anno [LocatedA (HsType DocNameI)] = SrcSpanAnnC +type instance Anno (HsType DocNameI) = SrcSpanAnnA +type instance Anno (DataFamInstDecl DocNameI) = SrcSpanAnnA +type instance Anno (DerivStrategy DocNameI) = SrcSpan +type instance Anno (FieldOcc DocNameI) = SrcSpan +type instance Anno (ConDeclField DocNameI) = SrcSpan +type instance Anno (Located (ConDeclField DocNameI)) = SrcSpan +type instance Anno [Located (ConDeclField DocNameI)] = SrcSpan +type instance Anno (ConDecl DocNameI) = SrcSpan +type instance Anno (FunDep DocNameI) = SrcSpan +type instance Anno (TyFamInstDecl DocNameI) = SrcSpanAnnA +type instance Anno [LocatedA (TyFamInstDecl DocNameI)] = SrcSpanAnnL +type instance Anno (FamilyDecl DocNameI) = SrcSpan +type instance Anno (Sig DocNameI) = SrcSpan +type instance Anno (InjectivityAnn DocNameI) = SrcSpan +type instance Anno (HsDecl DocNameI) = SrcSpanAnnA +type instance Anno (FamilyResultSig DocNameI) = SrcSpan +type instance Anno (HsOuterTyVarBndrs Specificity DocNameI) = SrcSpanAnnA +type instance Anno (HsSigType DocNameI) = SrcSpanAnnA + +type XRecCond a + = ( XParTy a ~ ApiAnn' AnnParen + -- , XParTy (NoGhcTc a) ~ ApiAnn' AnnParen + -- , NoGhcTcPass (NoGhcTcPass a) ~ NoGhcTcPass a + -- , IsPass a + , NoGhcTc a ~ a + , MapXRec a + , UnXRec a + , WrapXRec a (HsType a) + ) + +type instance XForAllTy DocNameI = ApiAnn +type instance XQualTy DocNameI = ApiAnn +type instance XTyVar DocNameI = ApiAnn +type instance XStarTy DocNameI = ApiAnn +type instance XAppTy DocNameI = ApiAnn +type instance XAppKindTy DocNameI = ApiAnn +type instance XFunTy DocNameI = ApiAnn +type instance XListTy DocNameI = ApiAnn' AnnParen +type instance XTupleTy DocNameI = ApiAnn' AnnParen +type instance XSumTy DocNameI = ApiAnn' AnnParen +type instance XOpTy DocNameI = ApiAnn +type instance XParTy DocNameI = ApiAnn' AnnParen +type instance XIParamTy DocNameI = ApiAnn +type instance XKindSig DocNameI = ApiAnn type instance XSpliceTy DocNameI = Void -- see `renameHsSpliceTy` -type instance XDocTy DocNameI = NoExtField -type instance XBangTy DocNameI = NoExtField -type instance XRecTy DocNameI = NoExtField -type instance XExplicitListTy DocNameI = NoExtField -type instance XExplicitTupleTy DocNameI = NoExtField -type instance XTyLit DocNameI = NoExtField -type instance XWildCardTy DocNameI = NoExtField +type instance XDocTy DocNameI = ApiAnn +type instance XBangTy DocNameI = ApiAnn +type instance XRecTy DocNameI = ApiAnn +type instance XExplicitListTy DocNameI = ApiAnn +type instance XExplicitTupleTy DocNameI = ApiAnn +type instance XTyLit DocNameI = ApiAnn +type instance XWildCardTy DocNameI = ApiAnn type instance XXType DocNameI = HsCoreTy type instance XHsForAllVis DocNameI = NoExtField @@ -766,6 +801,9 @@ type instance XXFamEqn DocNameI _ = NoExtCon type instance XCClsInstDecl DocNameI = NoExtField type instance XCDerivDecl DocNameI = NoExtField +type instance XStockStrategy DocNameI = NoExtField +type instance XAnyClassStrategy DocNameI = NoExtField +type instance XNewtypeStrategy DocNameI = NoExtField type instance XViaStrategy DocNameI = LHsSigType DocNameI type instance XDataFamInstD DocNameI = NoExtField type instance XTyFamInstD DocNameI = NoExtField @@ -793,3 +831,9 @@ type instance XConDeclField DocNameI = NoExtField type instance XXConDeclField DocNameI = NoExtCon type instance XXPat DocNameI = NoExtCon + +type instance XCInjectivityAnn DocNameI = NoExtField + +type instance XCFunDep DocNameI = NoExtField + +type instance XCTyFamInstDecl DocNameI = NoExtField |