packages feed

haddock 2.23.0 → 2.23.1

raw patch · 24 files changed

+2238/−76 lines, 24 filesdep ~haddock-api

Dependency ranges changed: haddock-api

Files

haddock-api/src/Haddock.hs view
@@ -432,7 +432,7 @@   when (Flag_HyperlinkedSource `elem` flags && not (null ifaces)) $ do     withTiming (pure dflags') "ppHyperlinkedSource" (const ()) $ do       _ <- {-# SCC ppHyperlinkedSource #-}-           ppHyperlinkedSource odir libDir opt_source_css pretty srcMap ifaces+           ppHyperlinkedSource (verbosity flags) odir libDir opt_source_css pretty srcMap ifaces       return ()  
haddock-api/src/Haddock/Backends/Hyperlinker.hs view
@@ -7,7 +7,7 @@   import Haddock.Types-import Haddock.Utils (writeUtf8File)+import Haddock.Utils (writeUtf8File, out, verbose, Verbosity) import Haddock.Backends.Hyperlinker.Renderer import Haddock.Backends.Hyperlinker.Parser import Haddock.Backends.Hyperlinker.Types@@ -18,12 +18,13 @@ import System.Directory import System.FilePath -import HieTypes       ( HieFile(..), HieASTs(..) )+import HieTypes       ( HieFile(..), HieASTs(..), HieAST(..), NodeInfo(..) ) import HieBin         ( readHieFile, hie_file_result) import Data.Map as M import FastString     ( mkFastString ) import Module         ( Module, moduleName ) import NameCache      ( initNameCache )+import SrcLoc         ( mkRealSrcLoc, realSrcLocSpan ) import UniqSupply     ( mkSplitUniqSupply )  @@ -32,27 +33,28 @@ -- Note that list of interfaces should also contain interfaces normally hidden -- when generating documentation. Otherwise this could lead to dead links in -- produced source.-ppHyperlinkedSource :: FilePath -- ^ Output directory+ppHyperlinkedSource :: Verbosity+                    -> FilePath -- ^ Output directory                     -> FilePath -- ^ Resource directory                     -> Maybe FilePath -- ^ Custom CSS file path                     -> Bool -- ^ Flag indicating whether to pretty-print HTML                     -> M.Map Module SrcPath -- ^ Paths to sources                     -> [Interface] -- ^ Interfaces for which we create source                     -> IO ()-ppHyperlinkedSource outdir libdir mstyle pretty srcs' ifaces = do+ppHyperlinkedSource verbosity outdir libdir mstyle pretty srcs' ifaces = do     createDirectoryIfMissing True srcdir     let cssFile = fromMaybe (defaultCssFile libdir) mstyle     copyFile cssFile $ srcdir </> srcCssFile     copyFile (libdir </> "html" </> highlightScript) $         srcdir </> highlightScript-    mapM_ (ppHyperlinkedModuleSource srcdir pretty srcs) ifaces+    mapM_ (ppHyperlinkedModuleSource verbosity srcdir pretty srcs) ifaces   where     srcdir = outdir </> hypSrcDir     srcs = (srcs', M.mapKeys moduleName srcs')  -- | Generate hyperlinked source for particular interface.-ppHyperlinkedModuleSource :: FilePath -> Bool -> SrcMaps -> Interface -> IO ()-ppHyperlinkedModuleSource srcdir pretty srcs iface = case ifaceHieFile iface of+ppHyperlinkedModuleSource :: Verbosity -> FilePath -> Bool -> SrcMaps -> Interface -> IO ()+ppHyperlinkedModuleSource verbosity srcdir pretty srcs iface = case ifaceHieFile iface of     Just hfp -> do         -- Parse the GHC-produced HIE file         u <- mkSplitUniqSupply 'a'@@ -64,24 +66,37 @@                  <$> (readHieFile (initNameCache u []) hfp)          -- Get the AST and tokens corresponding to the source file we want-        let mast | M.size asts == 1 = snd <$> M.lookupMin asts-                 | otherwise        = M.lookup (mkFastString file) asts+        let fileFs = mkFastString file+            mast | M.size asts == 1 = snd <$> M.lookupMin asts+                 | otherwise        = M.lookup fileFs asts+            ast = fromMaybe (emptyHieAst fileFs) mast+            fullAst = recoverFullIfaceTypes df types ast             tokens = parse df file rawSrc +        -- Warn if we didn't find an AST, but there were still ASTs+        if M.null asts+          then pure ()+          else out verbosity verbose $ unwords [ "couldn't find ast for"+                                               , file, show (M.keys asts) ]+         -- Produce and write out the hyperlinked sources-        case mast of-          Just ast ->-              let fullAst = recoverFullIfaceTypes df types ast-              in writeUtf8File path . renderToString pretty . render' fullAst $ tokens-          Nothing-            | M.size asts == 0 -> return ()-            | otherwise -> error $ unwords [ "couldn't find ast for"-                                           , file, show (M.keys asts) ]+        writeUtf8File path . renderToString pretty . render' fullAst $ tokens     Nothing -> return ()   where     df = ifaceDynFlags iface     render' = render (Just srcCssFile) (Just highlightScript) srcs     path = srcdir </> hypSrcModuleFile (ifaceMod iface)++    emptyNodeInfo = NodeInfo+      { nodeAnnotations = mempty+      , nodeType = []+      , nodeIdentifiers = mempty+      }+    emptyHieAst fileFs = Node+      { nodeInfo = emptyNodeInfo+      , nodeSpan = realSrcLocSpan (mkRealSrcLoc fileFs 1 0)+      , nodeChildren = []+      }  -- | Name of CSS file in output directory. srcCssFile :: FilePath
haddock-api/src/Haddock/Backends/Hyperlinker/Utils.hs view
@@ -102,7 +102,7 @@ -- >       hieAst -- -- However, this is very inefficient (both in time and space) because the--- mutliple calls to 'recoverFullType' don't share intermediate results. This+-- multiple calls to 'recoverFullType' don't share intermediate results. This -- function fixes that. recoverFullIfaceTypes   :: DynFlags
haddock-api/src/Haddock/Convert.hs view
@@ -28,7 +28,6 @@ import Data.Either (lefts, rights) import DataCon import FamInstEnv-import FV import HsSyn import Name import NameSet ( emptyNameSet )@@ -45,8 +44,7 @@ import PrelNames ( hasKey, eqTyConKey, ipClassKey, tYPETyConKey                  , liftedRepDataConKey ) import Unique ( getUnique )-import Util ( chkAppend, compareLength, dropList, filterByList, filterOut-            , splitAtList )+import Util ( chkAppend,dropList, filterByList, filterOut, splitAtList ) import Var import VarSet @@ -150,8 +148,7 @@   = let name            = synifyName tc         args_types_only = filterOutInvisibleTypes tc args         typats          = map (synifyType WithinType []) args_types_only-        annot_typats    = zipWith3 annotHsType (mkIsPolyTvs fam_tvs)-                                   args_types_only typats+        annot_typats    = zipWith3 annotHsType args_poly args_types_only typats         hs_rhs          = synifyType WithinType [] rhs     in HsIB { hsib_ext = map tyVarName tkvs             , hsib_body   = FamEqn { feqn_ext    = noExt@@ -162,7 +159,7 @@                                    , feqn_fixity = synifyFixity name                                    , feqn_rhs    = hs_rhs } }   where-    fam_tvs = tyConVisibleTyVars tc+    args_poly = tyConArgsPolyKinded tc  synifyAxiom :: CoAxiom br -> Either ErrMsg (HsDecl GhcRn) synifyAxiom ax@(CoAxiom { co_ax_tc = tc })@@ -472,18 +469,27 @@     in noLoc (HsKindSig noExt hs_ty hs_ki) annotHsType _    _ hs_ty = hs_ty --- | For every type variable in the input,--- report whether or not the tv is poly-kinded. This is used to eventually--- feed into 'annotHsType'.-mkIsPolyTvs :: [TyVar] -> [Bool]-mkIsPolyTvs = map is_poly_tv+-- | For every argument type that a type constructor accepts,+-- report whether or not the argument is poly-kinded. This is used to+-- eventually feed into 'annotThType'.+tyConArgsPolyKinded :: TyCon -> [Bool]+tyConArgsPolyKinded tc =+     map (is_poly_ty . tyVarKind)      tc_vis_tvs+  ++ map (is_poly_ty . tyCoBinderType) tc_res_kind_vis_bndrs+  ++ repeat True   where-    is_poly_tv tv = not $+    is_poly_ty :: Type -> Bool+    is_poly_ty ty = not $                     isEmptyVarSet $                     filterVarSet isTyVar $-                    tyCoVarsOfType $-                    tyVarKind tv+                    tyCoVarsOfType ty +    tc_vis_tvs :: [TyVar]+    tc_vis_tvs = tyConVisibleTyVars tc++    tc_res_kind_vis_bndrs :: [TyCoBinder]+    tc_res_kind_vis_bndrs = filter isVisibleBinder $ fst $ splitPiTys $ tyConResKind tc+ --states of what to do with foralls: data SynifyTypeState   = WithinType@@ -539,7 +545,7 @@       = noLoc (HsTyVar noExt NotPromoted (noLoc liftedTypeKindTyConName))       -- Use non-prefix tuple syntax where possible, because it looks nicer.       | Just sort <- tyConTuple_maybe tc-      , tyConArity tc == length tys+      , tyConArity tc == tys_len       = noLoc $ HsTupleTy noExt                           (case sort of                               BoxedTuple      -> HsBoxedTuple@@ -596,32 +602,17 @@                 (map (synifyType WithinType vs) $                  filterOut isCoercionTy ty_args) -    vis_tys  = filterOutInvisibleTypes tc tys-    binders  = tyConBinders tc-    res_kind = tyConResKind tc+    tys_len = length tys+    vis_tys = filterOutInvisibleTypes tc tys      maybe_sig :: LHsType GhcRn -> LHsType GhcRn     maybe_sig ty'-      | needs_kind_sig+      | tyConAppNeedsKindSig False tc tys_len       = let full_kind  = typeKind (mkTyConApp tc tys)             full_kind' = synifyType WithinType vs full_kind         in noLoc $ HsKindSig noExt ty' full_kind'       | otherwise = ty' -    needs_kind_sig :: Bool-    needs_kind_sig-      | GT <- compareLength tys binders-      = False-      | otherwise-      = let (dropped_binders, remaining_binders)-                  = splitAtList  tys binders-            result_kind  = mkTyConKind remaining_binders res_kind-            result_vars  = tyCoVarsOfType result_kind-            dropped_vars = fvVarSet $-                           mapUnionFV injectiveVarsOfBinder dropped_binders--        in not (subVarSet result_vars dropped_vars)- synifyType s vs (AppTy t1 (CoercionTy {})) = synifyType s vs t1 synifyType _ vs (AppTy t1 t2) = let   s1 = synifyType WithinType vs t1@@ -787,8 +778,8 @@     cls_tycon = classTyCon cls     ts  = filterOutInvisibleTypes cls_tycon types     ts' = map (synifyType WithinType vs) ts-    annot_ts = zipWith3 annotHsType is_poly_tvs ts ts'-    is_poly_tvs = mkIsPolyTvs (tyConVisibleTyVars cls_tycon)+    annot_ts = zipWith3 annotHsType args_poly ts ts'+    args_poly = tyConArgsPolyKinded cls_tycon     synifyClsIdSig = synifyIdSig ShowRuntimeRep DeleteTopLevelQuantification vs  -- Convert a family instance, this could be a type family or data family@@ -827,8 +818,8 @@     ts = filterOutInvisibleTypes fam_tc eta_expanded_lhs     synifyTypes = map (synifyType WithinType [])     ts' = synifyTypes ts-    annot_ts = zipWith3 annotHsType is_poly_tvs ts ts'-    is_poly_tvs = mkIsPolyTvs (tyConVisibleTyVars fam_tc)+    annot_ts = zipWith3 annotHsType args_poly ts ts'+    args_poly = tyConArgsPolyKinded fam_tc  {- Note [Invariant: Never expand type synonyms]
haddock-api/src/Haddock/Interface/Create.hs view
@@ -83,8 +83,9 @@        (TcGblEnv { tcg_rdr_env = gre                 , tcg_warns   = warnings-                , tcg_exports = all_exports+                , tcg_exports = all_exports0                 }, md) = tm_internals_ tm+      all_local_avails = gresToAvailInfo . filter isLocalGRE . globalRdrEnvElts $ gre    -- The 'pkgName' is necessary to decide what package to mention in "@since"   -- annotations. Not having it is not fatal though.@@ -111,9 +112,9 @@   let declsWithDocs = topDecls group_        exports0 = fmap (map (first unLoc)) mayExports-      exports-        | OptIgnoreExports `elem` opts = Nothing-        | otherwise = exports0+      (all_exports, exports)+        | OptIgnoreExports `elem` opts = (all_local_avails, Nothing)+        | otherwise = (all_exports0, exports0)        unrestrictedImportedMods         -- module re-exports are only possible with
haddock.cabal view
@@ -1,6 +1,6 @@ cabal-version:        2.4 name:                 haddock-version:              2.23.0+version:              2.23.1 synopsis:             A documentation-generation tool for Haskell libraries description:   This is Haddock, a tool for automatically generating documentation@@ -33,7 +33,7 @@ copyright:            (c) Simon Marlow, David Waern category:             Documentation build-type:           Simple-tested-with:          GHC==8.8.*+tested-with:          GHC==8.8.2  extra-source-files:   CHANGES.md@@ -46,6 +46,7 @@   html-test/src/*.hs   html-test/ref/*.html   hypsrc-test/src/*.hs+  hypsrc-test/src/*.h   hypsrc-test/ref/src/*.html   latex-test/src/**/*.hs   latex-test/ref/**/*.tex@@ -141,7 +142,7 @@   else     -- in order for haddock's advertised version number to have proper meaning,     -- we pin down to a single haddock-api version.-    build-depends:  haddock-api == 2.23.0+    build-depends:  haddock-api == 2.23.1  test-suite html-test   type:             exitcode-stdio-1.0
html-test/Main.hs view
@@ -54,12 +54,6 @@     -- we need a reliable way to deduplicate here.     -- Happens since PR #688.     "B"--    -- ignore-exports flag broke with PR #688. We use-    -- the Avails calculated by GHC now. Probably-    -- requires a change to GHC to "ignore" a modules-    -- export list reliably.-  , "IgnoreExports"   ]  checkIgnore :: FilePath -> Bool
+ html-test/ref/Bug1103.html view
@@ -0,0 +1,556 @@+<html xmlns="http://www.w3.org/1999/xhtml"+><head+  ><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"+     /><meta name="viewport" content="width=device-width, initial-scale=1"+     /><title+    >Bug1103</title+    ><link href="#" rel="stylesheet" type="text/css" title="Linuwial"+     /><link rel="stylesheet" type="text/css" href="#"+     /><link rel="stylesheet" type="text/css" href="#"+     /><script src="haddock-bundle.min.js" async="async" type="text/javascript"+    ></script+    ><script type="text/x-mathjax-config"+    >MathJax.Hub.Config({ tex2jax: { processClass: &quot;mathjax&quot;, ignoreClass: &quot;.*&quot; } });</script+    ><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"+    ></script+    ></head+  ><body+  ><div id="package-header"+    ><span class="caption empty"+      ></span+      ><ul class="links" id="page-menu"+      ><li+	><a href="#"+	  >Contents</a+	  ></li+	><li+	><a href="#"+	  >Index</a+	  ></li+	></ul+      ></div+    ><div id="content"+    ><div id="module-header"+      ><table class="info"+	><tr+	  ><th+	    >Safe Haskell</th+	    ><td+	    >Safe</td+	    ></tr+	  ></table+	><p class="caption"+	>Bug1103</p+	></div+      ><div id="interface"+      ><h1+	>Documentation</h1+	><div class="top"+	><p class="src"+	  ><span class="keyword"+	    >data family</span+	    > <a id="t:Foo1" class="def"+	    >Foo1</a+	    > :: <a href="#" title="Data.Kind"+	    >Type</a+	    > -&gt; <a href="#" title="Data.Kind"+	    >Type</a+	    > <a href="#" class="selflink"+	    >#</a+	    ></p+	  ><div class="subs instances"+	  ><h4 class="instances details-toggle-control details-toggle" data-details-id="i:Foo1"+	    >Instances</h4+	    ><details id="i:Foo1" open="open"+	    ><summary class="hide-when-js-enabled"+	      >Instances details</summary+	      ><table+	      ><tr+		><td class="src clearfix"+		  ><span class="inst-left"+		    ><span class="instance details-toggle-control details-toggle" data-details-id="i:if:Foo1:Foo1:1"+		      ></span+		      > <span class="keyword"+		      >data</span+		      > <a href="#" title="Bug1103"+		      >Foo1</a+		      > <a href="#" title="Data.Bool"+		      >Bool</a+		      ></span+		    > <a href="#" class="selflink"+		    >#</a+		    ></td+		  ><td class="doc empty"+		  ></td+		  ></tr+		><tr+		><td colspan="2"+		  ><details id="i:if:Foo1:Foo1:1"+		    ><summary class="hide-when-js-enabled"+		      >Instance details</summary+		      ><p+		      >Defined in <a href="#"+			>Bug1103</a+			></p+		      > <div class="src"+		      ><span class="keyword"+			>data</span+			> <a href="#" title="Bug1103"+			>Foo1</a+			> <a href="#" title="Data.Bool"+			>Bool</a+			> = <a id="v:Foo1Bool" class="def"+			>Foo1Bool</a+			></div+		      ></details+		    ></td+		  ></tr+		><tr+		><td class="src clearfix"+		  ><span class="inst-left"+		    ><span class="instance details-toggle-control details-toggle" data-details-id="i:if:Foo1:Foo1:2"+		      ></span+		      > <span class="keyword"+		      >data</span+		      > <a href="#" title="Bug1103"+		      >Foo1</a+		      > (<a href="#" title="Data.Maybe"+		      >Maybe</a+		      > a)</span+		    > <a href="#" class="selflink"+		    >#</a+		    ></td+		  ><td class="doc empty"+		  ></td+		  ></tr+		><tr+		><td colspan="2"+		  ><details id="i:if:Foo1:Foo1:2"+		    ><summary class="hide-when-js-enabled"+		      >Instance details</summary+		      ><p+		      >Defined in <a href="#"+			>Bug1103</a+			></p+		      > <div class="src"+		      ><span class="keyword"+			>data</span+			> <a href="#" title="Bug1103"+			>Foo1</a+			> (<a href="#" title="Data.Maybe"+			>Maybe</a+			> a)</div+		      ></details+		    ></td+		  ></tr+		></table+	      ></details+	    ></div+	  ></div+	><div class="top"+	><p class="src"+	  ><span class="keyword"+	    >data family</span+	    > <a id="t:Foo2" class="def"+	    >Foo2</a+	    > :: k -&gt; <a href="#" title="Data.Kind"+	    >Type</a+	    > <a href="#" class="selflink"+	    >#</a+	    ></p+	  ><div class="subs instances"+	  ><h4 class="instances details-toggle-control details-toggle" data-details-id="i:Foo2"+	    >Instances</h4+	    ><details id="i:Foo2" open="open"+	    ><summary class="hide-when-js-enabled"+	      >Instances details</summary+	      ><table+	      ><tr+		><td class="src clearfix"+		  ><span class="inst-left"+		    ><span class="instance details-toggle-control details-toggle" data-details-id="i:if:Foo2:Foo2:1"+		      ></span+		      > <span class="keyword"+		      >data</span+		      > <a href="#" title="Bug1103"+		      >Foo2</a+		      > (a :: <a href="#" title="Data.Char"+		      >Char</a+		      >)</span+		    > <a href="#" class="selflink"+		    >#</a+		    ></td+		  ><td class="doc empty"+		  ></td+		  ></tr+		><tr+		><td colspan="2"+		  ><details id="i:if:Foo2:Foo2:1"+		    ><summary class="hide-when-js-enabled"+		      >Instance details</summary+		      ><p+		      >Defined in <a href="#"+			>Bug1103</a+			></p+		      > <div class="src"+		      ><span class="keyword"+			>data</span+			> <a href="#" title="Bug1103"+			>Foo2</a+			> (a :: <a href="#" title="Data.Char"+			>Char</a+			>)</div+		      ></details+		    ></td+		  ></tr+		><tr+		><td class="src clearfix"+		  ><span class="inst-left"+		    ><span class="instance details-toggle-control details-toggle" data-details-id="i:if:Foo2:Foo2:2"+		      ></span+		      > <span class="keyword"+		      >data</span+		      > <a href="#" title="Bug1103"+		      >Foo2</a+		      > <a href="#" title="Data.Bool"+		      >Bool</a+		      ></span+		    > <a href="#" class="selflink"+		    >#</a+		    ></td+		  ><td class="doc empty"+		  ></td+		  ></tr+		><tr+		><td colspan="2"+		  ><details id="i:if:Foo2:Foo2:2"+		    ><summary class="hide-when-js-enabled"+		      >Instance details</summary+		      ><p+		      >Defined in <a href="#"+			>Bug1103</a+			></p+		      > <div class="src"+		      ><span class="keyword"+			>data</span+			> <a href="#" title="Bug1103"+			>Foo2</a+			> <a href="#" title="Data.Bool"+			>Bool</a+			> = <a id="v:Foo2Bool" class="def"+			>Foo2Bool</a+			></div+		      ></details+		    ></td+		  ></tr+		><tr+		><td class="src clearfix"+		  ><span class="inst-left"+		    ><span class="instance details-toggle-control details-toggle" data-details-id="i:if:Foo2:Foo2:3"+		      ></span+		      > <span class="keyword"+		      >data</span+		      > <a href="#" title="Bug1103"+		      >Foo2</a+		      > (<a href="#" title="Data.Maybe"+		      >Maybe</a+		      > a :: <a href="#" title="Data.Kind"+		      >Type</a+		      >)</span+		    > <a href="#" class="selflink"+		    >#</a+		    ></td+		  ><td class="doc empty"+		  ></td+		  ></tr+		><tr+		><td colspan="2"+		  ><details id="i:if:Foo2:Foo2:3"+		    ><summary class="hide-when-js-enabled"+		      >Instance details</summary+		      ><p+		      >Defined in <a href="#"+			>Bug1103</a+			></p+		      > <div class="src"+		      ><span class="keyword"+			>data</span+			> <a href="#" title="Bug1103"+			>Foo2</a+			> (<a href="#" title="Data.Maybe"+			>Maybe</a+			> a :: <a href="#" title="Data.Kind"+			>Type</a+			>)</div+		      ></details+		    ></td+		  ></tr+		><tr+		><td class="src clearfix"+		  ><span class="inst-left"+		    ><span class="instance details-toggle-control details-toggle" data-details-id="i:if:Foo2:Foo2:4"+		      ></span+		      > <span class="keyword"+		      >data</span+		      > <a href="#" title="Bug1103"+		      >Foo2</a+		      > (a :: <a href="#" title="Data.Char"+		      >Char</a+		      > -&gt; <a href="#" title="Data.Char"+		      >Char</a+		      >)</span+		    > <a href="#" class="selflink"+		    >#</a+		    ></td+		  ><td class="doc empty"+		  ></td+		  ></tr+		><tr+		><td colspan="2"+		  ><details id="i:if:Foo2:Foo2:4"+		    ><summary class="hide-when-js-enabled"+		      >Instance details</summary+		      ><p+		      >Defined in <a href="#"+			>Bug1103</a+			></p+		      > <div class="src"+		      ><span class="keyword"+			>data</span+			> <a href="#" title="Bug1103"+			>Foo2</a+			> (a :: <a href="#" title="Data.Char"+			>Char</a+			> -&gt; <a href="#" title="Data.Char"+			>Char</a+			>)</div+		      ></details+		    ></td+		  ></tr+		></table+	      ></details+	    ></div+	  ></div+	><div class="top"+	><p class="src"+	  ><span class="keyword"+	    >data family</span+	    > <a id="t:Foo3" class="def"+	    >Foo3</a+	    > :: k <a href="#" class="selflink"+	    >#</a+	    ></p+	  ><div class="subs instances"+	  ><h4 class="instances details-toggle-control details-toggle" data-details-id="i:Foo3"+	    >Instances</h4+	    ><details id="i:Foo3" open="open"+	    ><summary class="hide-when-js-enabled"+	      >Instances details</summary+	      ><table+	      ><tr+		><td class="src clearfix"+		  ><span class="inst-left"+		    ><span class="instance details-toggle-control details-toggle" data-details-id="i:if:Foo3:Foo3:1"+		      ></span+		      > <span class="keyword"+		      >data</span+		      > <a href="#" title="Bug1103"+		      >Foo3</a+		      ></span+		    > <a href="#" class="selflink"+		    >#</a+		    ></td+		  ><td class="doc empty"+		  ></td+		  ></tr+		><tr+		><td colspan="2"+		  ><details id="i:if:Foo3:Foo3:1"+		    ><summary class="hide-when-js-enabled"+		      >Instance details</summary+		      ><p+		      >Defined in <a href="#"+			>Bug1103</a+			></p+		      > <div class="src"+		      ><span class="keyword"+			>data</span+			> <a href="#" title="Bug1103"+			>Foo3</a+			></div+		      ></details+		    ></td+		  ></tr+		><tr+		><td class="src clearfix"+		  ><span class="inst-left"+		    ><span class="instance details-toggle-control details-toggle" data-details-id="i:if:Foo3:Foo3:2"+		      ></span+		      > <span class="keyword"+		      >data</span+		      > <a href="#" title="Bug1103"+		      >Foo3</a+		      > (a :: <a href="#" title="Data.Char"+		      >Char</a+		      >)</span+		    > <a href="#" class="selflink"+		    >#</a+		    ></td+		  ><td class="doc empty"+		  ></td+		  ></tr+		><tr+		><td colspan="2"+		  ><details id="i:if:Foo3:Foo3:2"+		    ><summary class="hide-when-js-enabled"+		      >Instance details</summary+		      ><p+		      >Defined in <a href="#"+			>Bug1103</a+			></p+		      > <div class="src"+		      ><span class="keyword"+			>data</span+			> <a href="#" title="Bug1103"+			>Foo3</a+			> (a :: <a href="#" title="Data.Char"+			>Char</a+			>)</div+		      ></details+		    ></td+		  ></tr+		><tr+		><td class="src clearfix"+		  ><span class="inst-left"+		    ><span class="instance details-toggle-control details-toggle" data-details-id="i:if:Foo3:Foo3:3"+		      ></span+		      > <span class="keyword"+		      >data</span+		      > <a href="#" title="Bug1103"+		      >Foo3</a+		      > (a :: <a href="#" title="Data.Char"+		      >Char</a+		      > -&gt; <a href="#" title="Data.Char"+		      >Char</a+		      >)</span+		    > <a href="#" class="selflink"+		    >#</a+		    ></td+		  ><td class="doc empty"+		  ></td+		  ></tr+		><tr+		><td colspan="2"+		  ><details id="i:if:Foo3:Foo3:3"+		    ><summary class="hide-when-js-enabled"+		      >Instance details</summary+		      ><p+		      >Defined in <a href="#"+			>Bug1103</a+			></p+		      > <div class="src"+		      ><span class="keyword"+			>data</span+			> <a href="#" title="Bug1103"+			>Foo3</a+			> (a :: <a href="#" title="Data.Char"+			>Char</a+			> -&gt; <a href="#" title="Data.Char"+			>Char</a+			>)</div+		      ></details+		    ></td+		  ></tr+		><tr+		><td class="src clearfix"+		  ><span class="inst-left"+		    ><span class="instance details-toggle-control details-toggle" data-details-id="i:if:Foo3:Foo3:4"+		      ></span+		      > <span class="keyword"+		      >data</span+		      > <a href="#" title="Bug1103"+		      >Foo3</a+		      > <a href="#" title="Data.Bool"+		      >Bool</a+		      ></span+		    > <a href="#" class="selflink"+		    >#</a+		    ></td+		  ><td class="doc empty"+		  ></td+		  ></tr+		><tr+		><td colspan="2"+		  ><details id="i:if:Foo3:Foo3:4"+		    ><summary class="hide-when-js-enabled"+		      >Instance details</summary+		      ><p+		      >Defined in <a href="#"+			>Bug1103</a+			></p+		      > <div class="src"+		      ><span class="keyword"+			>data</span+			> <a href="#" title="Bug1103"+			>Foo3</a+			> <a href="#" title="Data.Bool"+			>Bool</a+			> = <a id="v:Foo3Bool" class="def"+			>Foo3Bool</a+			></div+		      ></details+		    ></td+		  ></tr+		><tr+		><td class="src clearfix"+		  ><span class="inst-left"+		    ><span class="instance details-toggle-control details-toggle" data-details-id="i:if:Foo3:Foo3:5"+		      ></span+		      > <span class="keyword"+		      >data</span+		      > <a href="#" title="Bug1103"+		      >Foo3</a+		      > (<a href="#" title="Data.Maybe"+		      >Maybe</a+		      > a :: <a href="#" title="Data.Kind"+		      >Type</a+		      >)</span+		    > <a href="#" class="selflink"+		    >#</a+		    ></td+		  ><td class="doc empty"+		  ></td+		  ></tr+		><tr+		><td colspan="2"+		  ><details id="i:if:Foo3:Foo3:5"+		    ><summary class="hide-when-js-enabled"+		      >Instance details</summary+		      ><p+		      >Defined in <a href="#"+			>Bug1103</a+			></p+		      > <div class="src"+		      ><span class="keyword"+			>data</span+			> <a href="#" title="Bug1103"+			>Foo3</a+			> (<a href="#" title="Data.Maybe"+			>Maybe</a+			> a :: <a href="#" title="Data.Kind"+			>Type</a+			>)</div+		      ></details+		    ></td+		  ></tr+		></table+	      ></details+	    ></div+	  ></div+	></div+      ></div+    ><div id="footer"+    ></div+    ></body+  ></html+>
html-test/ref/IgnoreExports.html view
@@ -4,12 +4,14 @@      /><meta name="viewport" content="width=device-width, initial-scale=1"      /><title     >IgnoreExports</title-    ><link href="#" rel="stylesheet" type="text/css" title="Ocean"+    ><link href="#" rel="stylesheet" type="text/css" title="Linuwial"      /><link rel="stylesheet" type="text/css" href="#"      /><link rel="stylesheet" type="text/css" href="#"      /><script src="haddock-bundle.min.js" async="async" type="text/javascript"     ></script-    ><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"+    ><script type="text/x-mathjax-config"+    >MathJax.Hub.Config({ tex2jax: { processClass: &quot;mathjax&quot;, ignoreClass: &quot;.*&quot; } });</script+    ><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"     ></script     ></head   ><body@@ -46,15 +48,23 @@ 	  >Synopsis</summary 	  ><ul class="details-toggle" data-details-id="syn" 	  ><li class="src short"+	    ><span class="keyword"+	      >data</span+	      > <a href="#"+	      >Foo</a+	      > = <a href="#"+	      >Bar</a+	      ></li+	    ><li class="src short" 	    ><a href="#" 	      >foo</a-	      > :: <a href="#"+	      > :: <a href="#" title="Data.Int" 	      >Int</a 	      ></li 	    ><li class="src short" 	    ><a href="#" 	      >bar</a-	      > :: <a href="#"+	      > :: <a href="#" title="Data.Int" 	      >Int</a 	      ></li 	    ></ul@@ -65,9 +75,39 @@ 	>Documentation</h1 	><div class="top" 	><p class="src"+	  ><span class="keyword"+	    >data</span+	    > <a id="t:Foo" class="def"+	    >Foo</a+	    > <a href="#" class="selflink"+	    >#</a+	    ></p+	  ><div class="doc"+	  ><p+	    >documentation for Foo</p+	    ></div+	  ><div class="subs constructors"+	  ><p class="caption"+	    >Constructors</p+	    ><table+	    ><tr+	      ><td class="src"+		><a id="v:Bar" class="def"+		  >Bar</a+		  ></td+		><td class="doc"+		><p+		  >Documentation for Bar</p+		  ></td+		></tr+	      ></table+	    ></div+	  ></div+	><div class="top"+	><p class="src" 	  ><a id="v:foo" class="def" 	    >foo</a-	    > :: <a href="#"+	    > :: <a href="#" title="Data.Int" 	    >Int</a 	    > <a href="#" class="selflink" 	    >#</a@@ -81,7 +121,7 @@ 	><p class="src" 	  ><a id="v:bar" class="def" 	    >bar</a-	    > :: <a href="#"+	    > :: <a href="#" title="Data.Int" 	    >Int</a 	    > <a href="#" class="selflink" 	    >#</a
+ html-test/src/Bug1103.hs view
@@ -0,0 +1,24 @@+{-# LANGUAGE DataKinds #-}+{-# LANGUAGE GADTs #-}+{-# LANGUAGE PolyKinds #-}+{-# LANGUAGE TypeFamilies #-}+module Bug1103 where++import Data.Kind++data family   Foo1 :: Type -> Type+data instance Foo1 Bool = Foo1Bool+data instance Foo1 (Maybe a)++data family   Foo2 :: k -> Type+data instance Foo2 Bool = Foo2Bool+data instance Foo2 (Maybe a)+data instance Foo2 :: Char -> Type+data instance Foo2 :: (Char -> Char) -> Type where++data family   Foo3 :: k+data instance Foo3+data instance Foo3 Bool = Foo3Bool+data instance Foo3 (Maybe a)+data instance Foo3 :: Char -> Type+data instance Foo3 :: (Char -> Char) -> Type where
html-test/src/IgnoreExports.hs view
@@ -1,5 +1,8 @@ {-# OPTIONS_HADDOCK ignore-exports #-}-module IgnoreExports (foo) where+module IgnoreExports (Foo, foo) where++-- | documentation for Foo+data Foo = Bar -- ^ Documentation for Bar  -- | documentation for foo foo :: Int
+ hypsrc-test/ref/src/Bug1091.html view
@@ -0,0 +1,34 @@+<html xmlns="http://www.w3.org/1999/xhtml"+><head+  ><link rel="stylesheet" type="text/css" href="style.css"+     /><script type="text/javascript" src="highlight.js"+    ></script+    ></head+  ><body+  ><pre+    ><span class="hs-pragma"+      >{-# LANGUAGE CPP #-}</span+      ><span+      >+</span+      ><span id="line-2"+      ></span+      ><span class="hs-keyword"+      >module</span+      ><span+      > </span+      ><span class="hs-identifier"+      >Bug1091</span+      ><span+      > </span+      ><span class="hs-keyword"+      >where</span+      ><span class="hs-cpp"+      >++#include &quot;Include1For1091.h&quot;+</span+      ></pre+    ></body+  ></html+>
+ hypsrc-test/ref/src/CallingQuotes.html view
@@ -0,0 +1,104 @@+<html xmlns="http://www.w3.org/1999/xhtml"+><head+  ><link rel="stylesheet" type="text/css" href="style.css"+     /><script type="text/javascript" src="highlight.js"+    ></script+    ></head+  ><body+  ><pre+    ><span class="hs-pragma"+      >{-# LANGUAGE QuasiQuotes #-}</span+      ><span+      >+</span+      ><span id="line-2"+      ></span+      ><span class="hs-keyword"+      >module</span+      ><span+      > </span+      ><span class="hs-identifier"+      >CallingQuotes</span+      ><span+      > </span+      ><span class="hs-keyword"+      >where</span+      ><span+      >+</span+      ><span id="line-3"+      ></span+      ><span+      >+</span+      ><span id="line-4"+      ></span+      ><span class="hs-keyword"+      >import</span+      ><span+      > </span+      ><span class="annot"+      ><a href="Quasiquoter.html"+	><span class="hs-identifier"+	  >Quasiquoter</span+	  ></a+	></span+      ><span+      >+</span+      ><span id="line-5"+      ></span+      ><span+      >+</span+      ><span id="line-6"+      ></span+      ><span id="baz"+      ><span class="annot"+	><span class="annottext"+	  >baz :: [Char]+</span+	  ><a href="CallingQuotes.html#baz"+	  ><span class="hs-identifier hs-var hs-var"+	    >baz</span+	    ></a+	  ></span+	></span+      ><span+      >  </span+      ><span class="hs-glyph"+      >=</span+      ><span+      > </span+      ><span class="annot"+      ><span class=""+	>[string| foo bar |]</span+	></span+      ><span+      > </span+      ><span class="annot"+      ><span class="annottext"+	>[Char] -&gt; [Char] -&gt; [Char]+forall a. [a] -&gt; [a] -&gt; [a]+</span+	><span class="hs-operator hs-var"+	>++</span+	></span+      ><span+      > </span+      ><span class="annot"+      ><span class=""+	>[string| some+  mulitline+  quasiquote+|]</span+	></span+      ><span+      >+</span+      ><span id="line-10"+      ></span+      ></pre+    ></body+  ></html+>
+ hypsrc-test/ref/src/Quasiquoter.html view
@@ -0,0 +1,415 @@+<html xmlns="http://www.w3.org/1999/xhtml"+><head+  ><link rel="stylesheet" type="text/css" href="style.css"+     /><script type="text/javascript" src="highlight.js"+    ></script+    ></head+  ><body+  ><pre+    ><span class="hs-keyword"+      >module</span+      ><span+      > </span+      ><span class="hs-identifier"+      >Quasiquoter</span+      ><span+      > </span+      ><span class="hs-special"+      >(</span+      ><span+      > </span+      ><span class="annot"+      ><a href="Quasiquoter.html#string"+	><span class="hs-identifier"+	  >string</span+	  ></a+	></span+      ><span+      > </span+      ><span class="hs-special"+      >)</span+      ><span+      > </span+      ><span class="hs-keyword"+      >where</span+      ><span+      >+</span+      ><span id="line-2"+      ></span+      ><span+      >+</span+      ><span id="line-3"+      ></span+      ><span class="hs-keyword"+      >import</span+      ><span+      > </span+      ><span class="annot"+      ><span class="hs-identifier"+	>Language.Haskell.TH.Quote</span+	></span+      ><span+      >+</span+      ><span id="line-4"+      ></span+      ><span class="hs-keyword"+      >import</span+      ><span+      > </span+      ><span class="annot"+      ><span class="hs-identifier"+	>Language.Haskell.TH.Syntax</span+	></span+      ><span+      >+</span+      ><span id="line-5"+      ></span+      ><span+      >+</span+      ><span id="line-6"+      ></span+      ><span class="hs-comment"+      >-- | Quoter for constructing multiline string literals</span+      ><span+      >+</span+      ><span id="line-7"+      ></span+      ><span class="annot"+      ><a href="Quasiquoter.html#string"+	><span class="hs-identifier hs-type"+	  >string</span+	  ></a+	></span+      ><span+      > </span+      ><span class="hs-glyph"+      >::</span+      ><span+      > </span+      ><span class="annot"+      ><span class="hs-identifier hs-type"+	>QuasiQuoter</span+	></span+      ><span+      >+</span+      ><span id="line-8"+      ></span+      ><span id="string"+      ><span class="annot"+	><span class="annottext"+	  >string :: QuasiQuoter+</span+	  ><a href="Quasiquoter.html#string"+	  ><span class="hs-identifier hs-var hs-var"+	    >string</span+	    ></a+	  ></span+	></span+      ><span+      > </span+      ><span class="hs-glyph"+      >=</span+      ><span+      > </span+      ><span class="annot"+      ><span class="annottext"+	>QuasiQuoter :: (String -&gt; Q Exp)+-&gt; (String -&gt; Q Pat)+-&gt; (String -&gt; Q Type)+-&gt; (String -&gt; Q [Dec])+-&gt; QuasiQuoter+</span+	><span class="hs-identifier hs-type hs-type"+	>QuasiQuoter</span+	></span+      ><span+      >+</span+      ><span id="line-9"+      ></span+      ><span+      >  </span+      ><span class="hs-special"+      >{</span+      ><span+      > </span+      ><span class="annot"+      ><span class="annottext"+	>quoteExp :: String -&gt; Q Exp+</span+	><span class="hs-identifier hs-var"+	>quoteExp</span+	></span+      ><span+      > </span+      ><span class="hs-glyph"+      >=</span+      ><span+      > </span+      ><span class="annot"+      ><span class="annottext"+	>Exp -&gt; Q Exp+forall (f :: * -&gt; *) a. Applicative f =&gt; a -&gt; f a+</span+	><span class="hs-identifier hs-var"+	>pure</span+	></span+      ><span+      > </span+      ><span class="annot"+      ><span class="annottext"+	>(Exp -&gt; Q Exp) -&gt; (String -&gt; Exp) -&gt; String -&gt; Q Exp+forall b c a. (b -&gt; c) -&gt; (a -&gt; b) -&gt; a -&gt; c+</span+	><span class="hs-operator hs-var"+	>.</span+	></span+      ><span+      > </span+      ><span class="annot"+      ><span class="annottext"+	>Lit -&gt; Exp+</span+	><span class="hs-identifier hs-var"+	>LitE</span+	></span+      ><span+      > </span+      ><span class="annot"+      ><span class="annottext"+	>(Lit -&gt; Exp) -&gt; (String -&gt; Lit) -&gt; String -&gt; Exp+forall b c a. (b -&gt; c) -&gt; (a -&gt; b) -&gt; a -&gt; c+</span+	><span class="hs-operator hs-var"+	>.</span+	></span+      ><span+      > </span+      ><span class="annot"+      ><span class="annottext"+	>String -&gt; Lit+</span+	><span class="hs-identifier hs-var"+	>StringL</span+	></span+      ><span+      >+</span+      ><span id="line-10"+      ></span+      ><span+      >  </span+      ><span class="hs-special"+      >,</span+      ><span+      > </span+      ><span class="annot"+      ><span class="annottext"+	>quotePat :: String -&gt; Q Pat+</span+	><span class="hs-identifier hs-var"+	>quotePat</span+	></span+      ><span+      > </span+      ><span class="hs-glyph"+      >=</span+      ><span+      > </span+      ><span class="annot"+      ><span class="annottext"+	>String -&gt; Q Pat+forall a. String -&gt; Q a+</span+	><a href="#"+	><span class="hs-identifier hs-var"+	  >invalidDomain</span+	  ></a+	></span+      ><span+      >+</span+      ><span id="line-11"+      ></span+      ><span+      >  </span+      ><span class="hs-special"+      >,</span+      ><span+      > </span+      ><span class="annot"+      ><span class="annottext"+	>quoteType :: String -&gt; Q Type+</span+	><span class="hs-identifier hs-var"+	>quoteType</span+	></span+      ><span+      > </span+      ><span class="hs-glyph"+      >=</span+      ><span+      > </span+      ><span class="annot"+      ><span class="annottext"+	>String -&gt; Q Type+forall a. String -&gt; Q a+</span+	><a href="#"+	><span class="hs-identifier hs-var"+	  >invalidDomain</span+	  ></a+	></span+      ><span+      >+</span+      ><span id="line-12"+      ></span+      ><span+      >  </span+      ><span class="hs-special"+      >,</span+      ><span+      > </span+      ><span class="annot"+      ><span class="annottext"+	>quoteDec :: String -&gt; Q [Dec]+</span+	><span class="hs-identifier hs-var"+	>quoteDec</span+	></span+      ><span+      > </span+      ><span class="hs-glyph"+      >=</span+      ><span+      > </span+      ><span class="annot"+      ><span class="annottext"+	>String -&gt; Q [Dec]+forall a. String -&gt; Q a+</span+	><a href="#"+	><span class="hs-identifier hs-var"+	  >invalidDomain</span+	  ></a+	></span+      ><span+      >+</span+      ><span id="line-13"+      ></span+      ><span+      >  </span+      ><span class="hs-special"+      >}</span+      ><span+      >+</span+      ><span id="line-14"+      ></span+      ><span+      >  </span+      ><span class="hs-keyword"+      >where</span+      ><span+      >+</span+      ><span id="line-15"+      ></span+      ><span+      >    </span+      ><span id=""+      ><span class="annot"+	><a href="#"+	  ><span class="hs-identifier hs-type"+	    >invalidDomain</span+	    ></a+	  ></span+	><span+	> </span+	><span class="hs-glyph"+	>::</span+	><span+	> </span+	><span class="annot"+	><span class="hs-identifier hs-type"+	  >String</span+	  ></span+	><span+	> </span+	><span class="hs-glyph"+	>-&gt;</span+	><span+	> </span+	><span class="annot"+	><span class="hs-identifier hs-type"+	  >Q</span+	  ></span+	><span+	> </span+	><span class="annot"+	><a href="#"+	  ><span class="hs-identifier hs-type"+	    >a</span+	    ></a+	  ></span+	></span+      ><span+      >+</span+      ><span id="line-16"+      ></span+      ><span+      >    </span+      ><span id=""+      ><span class="annot"+	><span class="annottext"+	  >invalidDomain :: String -&gt; Q a+</span+	  ><a href="#"+	  ><span class="hs-identifier hs-var hs-var"+	    >invalidDomain</span+	    ></a+	  ></span+	></span+      ><span+      > </span+      ><span class="hs-identifier"+      >_</span+      ><span+      > </span+      ><span class="hs-glyph"+      >=</span+      ><span+      > </span+      ><span class="annot"+      ><span class="annottext"+	>String -&gt; Q a+forall (m :: * -&gt; *) a. MonadFail m =&gt; String -&gt; m a+</span+	><span class="hs-identifier hs-var"+	>fail</span+	></span+      ><span+      > </span+      ><span class="annot"+      ><span class="hs-string"+	>&quot;stringQuoter: only valid in expression context&quot;</span+	></span+      ><span+      >+</span+      ><span id="line-17"+      ></span+      ></pre+    ></body+  ></html+>
+ hypsrc-test/ref/src/TemplateHaskellQuasiquotes.html view
@@ -0,0 +1,659 @@+<html xmlns="http://www.w3.org/1999/xhtml"+><head+  ><link rel="stylesheet" type="text/css" href="style.css"+     /><script type="text/javascript" src="highlight.js"+    ></script+    ></head+  ><body+  ><pre+    ><span class="hs-pragma"+      >{-# LANGUAGE TemplateHaskell #-}</span+      ><span+      >+</span+      ><span id="line-2"+      ></span+      ><span+      >+</span+      ><span id="line-3"+      ></span+      ><span class="hs-keyword"+      >module</span+      ><span+      > </span+      ><span class="hs-identifier"+      >TemplateHaskellQuasiquotes</span+      ><span+      > </span+      ><span class="hs-keyword"+      >where</span+      ><span+      >+</span+      ><span id="line-4"+      ></span+      ><span+      >+</span+      ><span id="line-5"+      ></span+      ><span class="hs-keyword"+      >import</span+      ><span+      > </span+      ><span class="annot"+      ><span class="hs-identifier"+	>Language.Haskell.TH</span+	></span+      ><span+      >+</span+      ><span id="line-6"+      ></span+      ><span+      >+</span+      ><span id="line-7"+      ></span+      ><span class="annot"+      ><a href="TemplateHaskellQuasiquotes.html#aDecl"+	><span class="hs-identifier hs-type"+	  >aDecl</span+	  ></a+	></span+      ><span+      > </span+      ><span class="hs-glyph"+      >::</span+      ><span+      > </span+      ><span class="annot"+      ><span class="hs-identifier hs-type"+	>DecsQ</span+	></span+      ><span+      >+</span+      ><span id="line-8"+      ></span+      ><span id="aDecl"+      ><span class="annot"+	><span class="annottext"+	  >aDecl :: DecsQ+</span+	  ><a href="TemplateHaskellQuasiquotes.html#aDecl"+	  ><span class="hs-identifier hs-var hs-var"+	    >aDecl</span+	    ></a+	  ></span+	></span+      ><span+      > </span+      ><span class="hs-glyph"+      >=</span+      ><span+      > </span+      ><span class="hs-special"+      >[d|</span+      ><span+      >+</span+      ><span id="line-9"+      ></span+      ><span+      >    </span+      ><span class="hs-identifier"+      >bar</span+      ><span+      > </span+      ><span class="hs-glyph"+      >::</span+      ><span+      > </span+      ><span class=""+      >$aType</span+      ><span+      > </span+      ><span class="hs-glyph"+      >-&gt;</span+      ><span+      > </span+      ><span class="hs-special"+      >[</span+      ><span+      > </span+      ><span class="hs-special"+      >(</span+      ><span class="hs-identifier"+      >Int</span+      ><span class="hs-special"+      >,</span+      ><span+      > </span+      ><span class="hs-identifier"+      >String</span+      ><span class="hs-special"+      >)</span+      ><span+      > </span+      ><span class="hs-special"+      >]</span+      ><span+      >+</span+      ><span id="line-10"+      ></span+      ><span+      >    </span+      ><span class="hs-identifier"+      >bar</span+      ><span+      > </span+      ><span class=""+      >$aPattern</span+      ><span+      > </span+      ><span class="hs-glyph"+      >=</span+      ><span+      > </span+      ><span class=""+      >$anExpression</span+      ><span+      >+</span+      ><span id="line-11"+      ></span+      ><span+      >  </span+      ><span class="hs-special"+      >|]</span+      ><span+      >+</span+      ><span id="line-12"+      ></span+      ><span+      >+</span+      ><span id="line-13"+      ></span+      ><span class="annot"+      ><a href="TemplateHaskellQuasiquotes.html#aPattern"+	><span class="hs-identifier hs-type"+	  >aPattern</span+	  ></a+	></span+      ><span+      > </span+      ><span class="hs-glyph"+      >::</span+      ><span+      > </span+      ><span class="annot"+      ><span class="hs-identifier hs-type"+	>PatQ</span+	></span+      ><span+      >+</span+      ><span id="line-14"+      ></span+      ><span id="aPattern"+      ><span class="annot"+	><span class="annottext"+	  >aPattern :: PatQ+</span+	  ><a href="TemplateHaskellQuasiquotes.html#aPattern"+	  ><span class="hs-identifier hs-var hs-var"+	    >aPattern</span+	    ></a+	  ></span+	></span+      ><span+      > </span+      ><span class="hs-glyph"+      >=</span+      ><span+      > </span+      ><span class="hs-special"+      >[p|</span+      ><span+      >+</span+      ><span id="line-15"+      ></span+      ><span+      >    </span+      ><span class="hs-special"+      >[</span+      ><span+      > </span+      ><span class="hs-identifier"+      >aCrazyLongVariableName</span+      ><span+      >+</span+      ><span id="line-16"+      ></span+      ><span+      >    </span+      ><span class="hs-special"+      >,</span+      ><span+      > </span+      ><span class="hs-identifier"+      >_unused</span+      ><span+      >+</span+      ><span id="line-17"+      ></span+      ><span+      >    </span+      ><span class="hs-special"+      >,</span+      ><span+      > </span+      ><span class="hs-special"+      >(</span+      ><span class="hs-identifier"+      >y</span+      ><span class="hs-special"+      >,</span+      ><span+      > </span+      ><span class="hs-identifier"+      >z</span+      ><span class="hs-special"+      >)</span+      ><span+      >+</span+      ><span id="line-18"+      ></span+      ><span+      >    </span+      ><span class="hs-special"+      >,</span+      ><span+      > </span+      ><span class="hs-special"+      >(</span+      ><span+      > </span+      ><span class=""+      >$aNumberPattern</span+      ><span class="hs-special"+      >,</span+      ><span+      > </span+      ><span class="hs-string"+      >&quot;hello&quot;</span+      ><span class="hs-special"+      >)</span+      ><span+      >+</span+      ><span id="line-19"+      ></span+      ><span+      >    </span+      ><span class="hs-special"+      >]</span+      ><span+      >+</span+      ><span id="line-20"+      ></span+      ><span+      >  </span+      ><span class="hs-special"+      >|]</span+      ><span+      >+</span+      ><span id="line-21"+      ></span+      ><span+      >+</span+      ><span id="line-22"+      ></span+      ><span class="annot"+      ><a href="TemplateHaskellQuasiquotes.html#aNumberPattern"+	><span class="hs-identifier hs-type"+	  >aNumberPattern</span+	  ></a+	></span+      ><span+      > </span+      ><span class="hs-glyph"+      >::</span+      ><span+      > </span+      ><span class="annot"+      ><span class="hs-identifier hs-type"+	>PatQ</span+	></span+      ><span+      >+</span+      ><span id="line-23"+      ></span+      ><span id="aNumberPattern"+      ><span class="annot"+	><span class="annottext"+	  >aNumberPattern :: PatQ+</span+	  ><a href="TemplateHaskellQuasiquotes.html#aNumberPattern"+	  ><span class="hs-identifier hs-var hs-var"+	    >aNumberPattern</span+	    ></a+	  ></span+	></span+      ><span+      > </span+      ><span class="hs-glyph"+      >=</span+      ><span+      > </span+      ><span class="hs-special"+      >[p|</span+      ><span+      >+</span+      ><span id="line-24"+      ></span+      ><span+      >    </span+      ><span class="hs-identifier"+      >w</span+      ><span+      > </span+      ><span class="hs-glyph"+      >@</span+      ><span+      > </span+      ><span class="hs-identifier"+      >v</span+      ><span+      > </span+      ><span class="hs-glyph"+      >@</span+      ><span+      > </span+      ><span class="hs-number"+      >4.5</span+      ><span+      >+</span+      ><span id="line-25"+      ></span+      ><span+      >  </span+      ><span class="hs-special"+      >|]</span+      ><span+      >+</span+      ><span id="line-26"+      ></span+      ><span+      >+</span+      ><span id="line-27"+      ></span+      ><span class="annot"+      ><a href="TemplateHaskellQuasiquotes.html#anExpression"+	><span class="hs-identifier hs-type"+	  >anExpression</span+	  ></a+	></span+      ><span class="hs-special"+      >,</span+      ><span+      > </span+      ><span class="annot"+      ><a href="TemplateHaskellQuasiquotes.html#anExpression2"+	><span class="hs-identifier hs-type"+	  >anExpression2</span+	  ></a+	></span+      ><span+      > </span+      ><span class="hs-glyph"+      >::</span+      ><span+      > </span+      ><span class="annot"+      ><span class="hs-identifier hs-type"+	>ExpQ</span+	></span+      ><span+      >+</span+      ><span id="line-28"+      ></span+      ><span id="anExpression"+      ><span class="annot"+	><span class="annottext"+	  >anExpression :: ExpQ+</span+	  ><a href="TemplateHaskellQuasiquotes.html#anExpression"+	  ><span class="hs-identifier hs-var hs-var"+	    >anExpression</span+	    ></a+	  ></span+	></span+      ><span+      > </span+      ><span class="hs-glyph"+      >=</span+      ><span+      > </span+      ><span class="hs-special"+      >[e|</span+      ><span+      >+</span+      ><span id="line-29"+      ></span+      ><span+      >    </span+      ><span class="hs-special"+      >[</span+      ><span+      > </span+      ><span class="hs-special"+      >(</span+      ><span class="hs-number"+      >1</span+      ><span+      > </span+      ><span class="hs-operator"+      >+</span+      ><span+      > </span+      ><span class=""+      >$anExpression2</span+      ><span class="hs-special"+      >,</span+      ><span+      > </span+      ><span class="hs-string"+      >&quot;world&quot;</span+      ><span class="hs-special"+      >)</span+      ><span+      > </span+      ><span class="hs-special"+      >]</span+      ><span+      >+</span+      ><span id="line-30"+      ></span+      ><span+      >  </span+      ><span class="hs-special"+      >|]</span+      ><span+      >+</span+      ><span id="line-31"+      ></span+      ><span id="anExpression2"+      ><span class="annot"+	><span class="annottext"+	  >anExpression2 :: ExpQ+</span+	  ><a href="TemplateHaskellQuasiquotes.html#anExpression2"+	  ><span class="hs-identifier hs-var hs-var"+	    >anExpression2</span+	    ></a+	  ></span+	></span+      ><span+      > </span+      ><span class="hs-glyph"+      >=</span+      ><span+      > </span+      ><span class="hs-special"+      >[|</span+      ><span+      > </span+      ><span class="hs-special"+      >(</span+      ><span class="hs-number"+      >1</span+      ><span+      > </span+      ><span class="hs-operator"+      >+</span+      ><span+      > </span+      ><span class="hs-identifier"+      >round</span+      ><span+      > </span+      ><span class="hs-identifier"+      >pi</span+      ><span class="hs-special"+      >)</span+      ><span+      > </span+      ><span class="hs-special"+      >|]</span+      ><span+      >+</span+      ><span id="line-32"+      ></span+      ><span+      >+</span+      ><span id="line-33"+      ></span+      ><span class="annot"+      ><a href="TemplateHaskellQuasiquotes.html#aType"+	><span class="hs-identifier hs-type"+	  >aType</span+	  ></a+	></span+      ><span+      > </span+      ><span class="hs-glyph"+      >::</span+      ><span+      > </span+      ><span class="annot"+      ><span class="hs-identifier hs-type"+	>TypeQ</span+	></span+      ><span+      >+</span+      ><span id="line-34"+      ></span+      ><span id="aType"+      ><span class="annot"+	><span class="annottext"+	  >aType :: TypeQ+</span+	  ><a href="TemplateHaskellQuasiquotes.html#aType"+	  ><span class="hs-identifier hs-var hs-var"+	    >aType</span+	    ></a+	  ></span+	></span+      ><span+      > </span+      ><span class="hs-glyph"+      >=</span+      ><span+      > </span+      ><span class="hs-special"+      >[t|</span+      ><span+      >+</span+      ><span id="line-35"+      ></span+      ><span+      >    </span+      ><span class="hs-special"+      >[</span+      ><span+      > </span+      ><span class="hs-special"+      >(</span+      ><span class="hs-identifier"+      >Double</span+      ><span class="hs-special"+      >,</span+      ><span+      > </span+      ><span class="hs-identifier"+      >String</span+      ><span class="hs-special"+      >)</span+      ><span+      > </span+      ><span class="hs-special"+      >]</span+      ><span+      >+</span+      ><span id="line-36"+      ></span+      ><span+      >  </span+      ><span class="hs-special"+      >|]</span+      ><span+      >+</span+      ><span id="line-37"+      ></span+      ><span+      >+</span+      ><span id="line-38"+      ></span+      ><span+      >+</span+      ><span id="line-39"+      ></span+      ><span+      >+</span+      ><span id="line-40"+      ></span+      ></pre+    ></body+  ></html+>
+ hypsrc-test/ref/src/TemplateHaskellSplices.html view
@@ -0,0 +1,135 @@+<html xmlns="http://www.w3.org/1999/xhtml"+><head+  ><link rel="stylesheet" type="text/css" href="style.css"+     /><script type="text/javascript" src="highlight.js"+    ></script+    ></head+  ><body+  ><pre+    ><span class="hs-pragma"+      >{-# LANGUAGE TemplateHaskell #-}</span+      ><span+      >+</span+      ><span id="line-2"+      ></span+      ><span class="hs-keyword"+      >module</span+      ><span+      > </span+      ><span class="hs-identifier"+      >TemplateHaskellSplices</span+      ><span+      > </span+      ><span class="hs-keyword"+      >where</span+      ><span+      >+</span+      ><span id="line-3"+      ></span+      ><span+      >+</span+      ><span id="line-4"+      ></span+      ><span class="hs-keyword"+      >import</span+      ><span+      > </span+      ><span class="annot"+      ><a href="TemplateHaskellQuasiquotes.html"+	><span class="hs-identifier"+	  >TemplateHaskellQuasiquotes</span+	  ></a+	></span+      ><span+      >+</span+      ><span id="line-5"+      ></span+      ><span+      >+</span+      ><span id="line-6"+      ></span+      ><span class="hs-special"+      >$(</span+      ><span id="bar"+      ><span class="annot"+	><span class="annottext"+	  >[(Double, String)] -&gt; [(Int, String)]+</span+	  ><a href="TemplateHaskellSplices.html#bar"+	  ><span class="hs-identifier hs-type hs-var"+	    >aDecl</span+	    ></a+	  ></span+	></span+      ><span class="hs-special"+      >)</span+      ><span+      >+</span+      ><span id="line-7"+      ></span+      ><span+      >+</span+      ><span id="line-8"+      ></span+      ><span id="foo"+      ><span class="annot"+	><span class="annottext"+	  >foo :: Integer+</span+	  ><a href="TemplateHaskellSplices.html#foo"+	  ><span class="hs-identifier hs-var hs-var"+	    >foo</span+	    ></a+	  ></span+	></span+      ><span+      > </span+      ><span class="hs-glyph"+      >=</span+      ><span+      > </span+      ><span class="annot"+      ><span class="annottext"+	>Integer -&gt; Integer+forall a. a -&gt; a+</span+	><span class="hs-identifier hs-var"+	>id</span+	></span+      ><span+      > </span+      ><span class="hs-special"+      >$(</span+      ><span class="annot"+      ><span class="annottext"+	>Double+Double -&gt; Integer+Integer -&gt; Integer -&gt; Integer+forall a. Floating a =&gt; a+forall a. Num a =&gt; a -&gt; a -&gt; a+forall a b. (RealFrac a, Integral b) =&gt; a -&gt; b++ :: forall a. Num a =&gt; a -&gt; a -&gt; a+round :: forall a b. (RealFrac a, Integral b) =&gt; a -&gt; b+pi :: forall a. Floating a =&gt; a+</span+	><span class="hs-identifier hs-var hs-var hs-var"+	>anExpression2</span+	></span+      ><span class="hs-special"+      >)</span+      ><span+      >+</span+      ><span id="line-9"+      ></span+      ></pre+    ></body+  ></html+>
+ hypsrc-test/ref/src/UsingQuasiquotes.html view
@@ -0,0 +1,104 @@+<html xmlns="http://www.w3.org/1999/xhtml"+><head+  ><link rel="stylesheet" type="text/css" href="style.css"+     /><script type="text/javascript" src="highlight.js"+    ></script+    ></head+  ><body+  ><pre+    ><span class="hs-pragma"+      >{-# LANGUAGE QuasiQuotes #-}</span+      ><span+      >+</span+      ><span id="line-2"+      ></span+      ><span class="hs-keyword"+      >module</span+      ><span+      > </span+      ><span class="hs-identifier"+      >UsingQuasiquotes</span+      ><span+      > </span+      ><span class="hs-keyword"+      >where</span+      ><span+      >+</span+      ><span id="line-3"+      ></span+      ><span+      >+</span+      ><span id="line-4"+      ></span+      ><span class="hs-keyword"+      >import</span+      ><span+      > </span+      ><span class="annot"+      ><a href="Quasiquoter.html"+	><span class="hs-identifier"+	  >Quasiquoter</span+	  ></a+	></span+      ><span+      >+</span+      ><span id="line-5"+      ></span+      ><span+      >+</span+      ><span id="line-6"+      ></span+      ><span id="baz"+      ><span class="annot"+	><span class="annottext"+	  >baz :: [Char]+</span+	  ><a href="UsingQuasiquotes.html#baz"+	  ><span class="hs-identifier hs-var hs-var"+	    >baz</span+	    ></a+	  ></span+	></span+      ><span+      >  </span+      ><span class="hs-glyph"+      >=</span+      ><span+      > </span+      ><span class="annot"+      ><span class=""+	>[string| foo bar |]</span+	></span+      ><span+      > </span+      ><span class="annot"+      ><span class="annottext"+	>[Char] -&gt; [Char] -&gt; [Char]+forall a. [a] -&gt; [a] -&gt; [a]+</span+	><span class="hs-operator hs-var"+	>++</span+	></span+      ><span+      > </span+      ><span class="annot"+      ><span class=""+	>[string| some+  mulitline+  quasiquote+|]</span+	></span+      ><span+      >+</span+      ><span id="line-10"+      ></span+      ></pre+    ></body+  ></html+>
+ hypsrc-test/src/Bug1091.hs view
@@ -0,0 +1,4 @@+{-# LANGUAGE CPP #-}+module Bug1091 where++#include "Include1For1091.h"
+ hypsrc-test/src/Include1For1091.h view
@@ -0,0 +1,6 @@+/* Include1For1091.h */++foo :: Int+foo = 42++#include "Include2For1091.h"
+ hypsrc-test/src/Include2For1091.h view
@@ -0,0 +1,4 @@+/* Include2For1091.h */++bar :: Int+bar = 27
+ hypsrc-test/src/Quasiquoter.hs view
@@ -0,0 +1,16 @@+module Quasiquoter ( string ) where++import Language.Haskell.TH.Quote+import Language.Haskell.TH.Syntax++-- | Quoter for constructing multiline string literals+string :: QuasiQuoter+string = QuasiQuoter+  { quoteExp = pure . LitE . StringL+  , quotePat = invalidDomain+  , quoteType = invalidDomain+  , quoteDec = invalidDomain+  }+  where+    invalidDomain :: String -> Q a+    invalidDomain _ = fail "stringQuoter: only valid in expression context"
+ hypsrc-test/src/TemplateHaskellQuasiquotes.hs view
@@ -0,0 +1,39 @@+{-# LANGUAGE TemplateHaskell #-}++module TemplateHaskellQuasiquotes where++import Language.Haskell.TH++aDecl :: DecsQ+aDecl = [d|+    bar :: $aType -> [ (Int, String) ]+    bar $aPattern = $anExpression+  |]++aPattern :: PatQ+aPattern = [p|+    [ aCrazyLongVariableName+    , _unused+    , (y, z)+    , ( $aNumberPattern, "hello")+    ]+  |]++aNumberPattern :: PatQ+aNumberPattern = [p|+    w @ v @ 4.5+  |]++anExpression, anExpression2 :: ExpQ+anExpression = [e|+    [ (1 + $anExpression2, "world") ]+  |]+anExpression2 = [| (1 + round pi) |]++aType :: TypeQ+aType = [t|+    [ (Double, String) ]+  |]+++
+ hypsrc-test/src/TemplateHaskellSplices.hs view
@@ -0,0 +1,8 @@+{-# LANGUAGE TemplateHaskell #-}+module TemplateHaskellSplices where++import TemplateHaskellQuasiquotes++$(aDecl)++foo = id $(anExpression2)
+ hypsrc-test/src/UsingQuasiquotes.hs view
@@ -0,0 +1,9 @@+{-# LANGUAGE QuasiQuotes #-}+module UsingQuasiquotes where++import Quasiquoter++baz  = [string| foo bar |] ++ [string| some+  mulitline+  quasiquote+|]