diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Haddock/Interface/AttachInstances.hs | 29 |
1 files changed, 16 insertions, 13 deletions
diff --git a/src/Haddock/Interface/AttachInstances.hs b/src/Haddock/Interface/AttachInstances.hs index c14ff8a6..0df45345 100644 --- a/src/Haddock/Interface/AttachInstances.hs +++ b/src/Haddock/Interface/AttachInstances.hs @@ -12,7 +12,6 @@ module Haddock.Interface.AttachInstances (attachInstances) where import Haddock.Types -import Haddock.GHC.Utils import qualified Data.Map as Map import Data.Map (Map) @@ -39,15 +38,15 @@ import FastString attachInstances :: [Interface] -> [Name] -> [Interface] -attachInstances modules filterNames = map attach modules +attachInstances ifaces filterNames = map attach ifaces where instMap = fmap (map toHsInstHead . sortImage instHead) $ - collectInstances modules filterNames + collectInstances ifaces filterNames - attach mod = mod { ifaceExportItems = newItems } + attach iface = iface { ifaceExportItems = newItems } where - newItems = map attachExport (ifaceExportItems mod) + newItems = map attachExport (ifaceExportItems iface) attachExport (ExportDecl decl@(L _ (TyClD d)) doc subs _) | isClassDecl d || isDataDecl d || isFamilyDecl d = @@ -72,13 +71,15 @@ collectInstances -> [Name] -> Map Name [([TyVar], [PredType], Class, [Type])] -- maps class/type names to instances -collectInstances modules filterNames +collectInstances ifaces _ -- filterNames = Map.fromListWith (flip (++)) tyInstPairs `Map.union` Map.fromListWith (flip (++)) classInstPairs where - allInstances = concat (map ifaceInstances modules) + allInstances = concat (map ifaceInstances ifaces) classInstPairs = [ (is_cls inst, [instanceHead inst]) | - inst <- allInstances, Just n <- nub (is_tcs inst) ] + inst <- allInstances ] + -- unfinished filtering of internal instances + -- Just n <- nub (is_tcs inst) ] -- n `elem` filterNames ] tyInstPairs = [ (tycon, [instanceHead inst]) | inst <- allInstances, Just tycon <- nub (is_tcs inst) ] @@ -98,8 +99,8 @@ instHead (_, _, cls, args) simplify (ForAllTy _ t) = simplify t simplify (FunTy t1 t2) = SimpleType funTyConName [simplify t1, simplify t2] - simplify (AppTy t1 t2) = SimpleType s (args ++ [simplify t2]) - where (SimpleType s args) = simplify t1 + simplify (AppTy t1 t2) = SimpleType s (ts ++ [simplify t2]) + where (SimpleType s ts) = simplify t1 simplify (TyVarTy v) = SimpleType (tyVarName v) [] simplify (TyConApp tc ts) = SimpleType (tyConName tc) (map simplify ts) simplify _ = error "simplify" @@ -111,6 +112,7 @@ sortImage f xs = map snd $ sortBy cmp_fst [(f x, x) | x <- xs] where cmp_fst (x,_) (y,_) = compare x y +funTyConName :: Name funTyConName = mkWiredInName gHC_PRIM (mkOccNameFS tcName FSLIT("(->)")) funTyConKey @@ -133,6 +135,7 @@ toHsPred (IParam n t) = HsIParam n (toLHsType t) toHsPred (EqPred t1 t2) = HsEqualP (toLHsType t1) (toLHsType t2) +toLHsType :: Type -> Located (HsType Name) toLHsType = noLoc . toHsType @@ -148,11 +151,11 @@ toHsType t = case t of _ -> app (tycon tc) ts FunTy a b -> HsFunTy (toLHsType a) (toLHsType b) - ForAllTy v t -> cvForAll [v] t + ForAllTy v ty -> cvForAll [v] ty PredTy p -> HsPredTy (toHsPred p) where tycon tc = HsTyVar (tyConName tc) app tc ts = foldl (\a b -> HsAppTy (noLoc a) (noLoc b)) tc (map toHsType ts) - cvForAll vs (ForAllTy v t) = cvForAll (v:vs) t - cvForAll vs t = mkExplicitHsForAllTy (tyvarbinders vs) (noLoc []) (toLHsType t) + cvForAll vs (ForAllTy v ty) = cvForAll (v:vs) ty + cvForAll vs ty = mkExplicitHsForAllTy (tyvarbinders vs) (noLoc []) (toLHsType ty) tyvarbinders vs = map (noLoc . UserTyVar . tyVarName) vs |