diff options
Diffstat (limited to 'haddock-api/src/Haddock/Interface')
| -rw-r--r-- | haddock-api/src/Haddock/Interface/AttachInstances.hs | 24 | ||||
| -rw-r--r-- | haddock-api/src/Haddock/Interface/Rename.hs | 12 | 
2 files changed, 23 insertions, 13 deletions
| diff --git a/haddock-api/src/Haddock/Interface/AttachInstances.hs b/haddock-api/src/Haddock/Interface/AttachInstances.hs index 080de6ff..86a9957c 100644 --- a/haddock-api/src/Haddock/Interface/AttachInstances.hs +++ b/haddock-api/src/Haddock/Interface/AttachInstances.hs @@ -22,6 +22,7 @@ import Control.Arrow hiding ((<+>))  import Data.List  import Data.Ord (comparing)  import Data.Function (on) +import Data.Maybe ( maybeToList, mapMaybe )  import qualified Data.Map as Map  import qualified Data.Set as Set @@ -41,7 +42,7 @@ import PrelNames  import TcRnDriver (tcRnGetInfo)  import TcType (tcSplitSigmaTy)  import TyCon -import TypeRep +import TyCoRep  import TysPrim( funTyCon )  import Var hiding (varName)  #define FSLIT(x) (mkFastString# (x#)) @@ -146,18 +147,26 @@ instHead (_, _, cls, args)  argCount :: Type -> Int  argCount (AppTy t _) = argCount t + 1  argCount (TyConApp _ ts) = length ts -argCount (FunTy _ _ ) = 2 +argCount (ForAllTy (Anon _) _ ) = 2  argCount (ForAllTy _ t) = argCount t +argCount (CastTy t _) = argCount t  argCount _ = 0  simplify :: Type -> SimpleType +simplify (ForAllTy (Anon t1) t2) = SimpleType funTyConName [simplify t1, simplify t2]  simplify (ForAllTy _ t) = simplify t -simplify (FunTy t1 t2) = SimpleType funTyConName [simplify t1, simplify t2] -simplify (AppTy t1 t2) = SimpleType s (ts ++ [simplify t2]) +simplify (AppTy t1 t2) = SimpleType s (ts ++ maybeToList (simplify_maybe t2))    where (SimpleType s ts) = simplify t1  simplify (TyVarTy v) = SimpleType (tyVarName v) [] -simplify (TyConApp tc ts) = SimpleType (tyConName tc) (map simplify ts) +simplify (TyConApp tc ts) = SimpleType (tyConName tc) +                                       (mapMaybe simplify_maybe ts)  simplify (LitTy l) = SimpleTyLit l +simplify (CastTy ty _) = simplify ty +simplify (CoercionTy _) = error "simplify:Coercion" + +simplify_maybe :: Type -> Maybe SimpleType +simplify_maybe (CoercionTy {}) = Nothing +simplify_maybe ty              = Just (simplify ty)  -- Used for sorting  instFam :: FamInst -> ([Int], Name, [SimpleType], Int, SimpleType) @@ -207,9 +216,10 @@ isTypeHidden expInfo = typeHidden          TyVarTy {} -> False          AppTy t1 t2 -> typeHidden t1 || typeHidden t2          TyConApp tcon args -> nameHidden (getName tcon) || any typeHidden args -        FunTy t1 t2 -> typeHidden t1 || typeHidden t2 -        ForAllTy _ ty -> typeHidden ty +        ForAllTy bndr ty -> typeHidden (binderType bndr) || typeHidden ty          LitTy _ -> False +        CastTy ty _ -> typeHidden ty +        CoercionTy {} -> False      nameHidden :: Name -> Bool      nameHidden = isNameHidden expInfo diff --git a/haddock-api/src/Haddock/Interface/Rename.hs b/haddock-api/src/Haddock/Interface/Rename.hs index 0b975687..845cb909 100644 --- a/haddock-api/src/Haddock/Interface/Rename.hs +++ b/haddock-api/src/Haddock/Interface/Rename.hs @@ -234,11 +234,11 @@ renameType t = case t of    HsTupleTy b ts -> return . HsTupleTy b =<< mapM renameLType ts -  HsOpTy a (w, L loc op) b -> do +  HsOpTy a (L loc op) b -> do      op' <- rename op      a'  <- renameLType a      b'  <- renameLType b -    return (HsOpTy a' (w, L loc op') b') +    return (HsOpTy a' (L loc op') b')    HsParTy ty -> return . HsParTy =<< renameLType ty @@ -254,18 +254,18 @@ renameType t = case t of    HsTyLit x -> return (HsTyLit x) -  HsWrapTy a b            -> HsWrapTy a <$> renameType b    HsRecTy a               -> HsRecTy <$> mapM renameConDeclFieldField a    HsCoreTy a              -> pure (HsCoreTy a)    HsExplicitListTy  a b   -> HsExplicitListTy  a <$> mapM renameLType b    HsExplicitTupleTy a b   -> HsExplicitTupleTy a <$> mapM renameLType b    HsSpliceTy _ _          -> error "renameType: HsSpliceTy"    HsWildCardTy a          -> HsWildCardTy <$> renameWildCardInfo a +  HsAppsTy _              -> error "renameType: HsAppsTy"  renameLHsQTyVars :: LHsQTyVars Name -> RnM (LHsQTyVars DocName) -renameLHsQTyVars (HsQTvs { hsq_kvs = _, hsq_tvs = tvs }) +renameLHsQTyVars (HsQTvs { hsq_implicit = _, hsq_explicit = tvs })    = do { tvs' <- mapM renameLTyVarBndr tvs -       ; return (HsQTvs { hsq_kvs = error "haddock:renameLHsQTyVars", hsq_tvs = tvs' }) } +       ; return (HsQTvs { hsq_implicit = error "haddock:renameLHsQTyVars", hsq_explicit = tvs' }) }                  -- This is rather bogus, but I'm not sure what else to do  renameLTyVarBndr :: LHsTyVarBndr Name -> RnM (LHsTyVarBndr DocName) @@ -529,7 +529,7 @@ renameImplicit :: (in_thing -> RnM out_thing)  renameImplicit rn_thing (HsIB { hsib_body = thing })    = do { thing' <- rn_thing thing         ; return (HsIB { hsib_body = thing' -                      , hsib_kvs = PlaceHolder, hsib_tvs = PlaceHolder }) } +                      , hsib_vars = PlaceHolder }) }  renameWc :: (in_thing -> RnM out_thing)           -> HsWildCardBndrs Name in_thing | 
