From 1b26460fb3b5df5215cc1e6715661cbc7c950085 Mon Sep 17 00:00:00 2001
From: Alec Theriault <alec.theriault@gmail.com>
Date: Thu, 31 Jan 2019 01:37:25 -0800
Subject: Use `.hie` files for the Hyperlinker backend (#977)

# Summary

This is a large architectural change to the Hyperlinker.

  * extract link (and now also type) information from `.hie` instead
    of doing ad-hoc SYB traversals of the `RenamedSource`. Also
    adds a superb type-on-hover feature (#715).

 * re-engineer the lexer to avoid needless string conversions. By going
    directly through GHC's `P` monad and taking bytestring slices, we
    avoid a ton of allocation and have better handling of position
    pragmas and CPP.

In terms of performance, the Haddock side of things has gotten _much_
more efficient. Unfortunately, much of this is cancelled out by the
increased GHC workload for generating `.hie` files. For the full set of
boot libs (including `ghc`-the-library)

  * the sum of total time went down by 9-10% overall
  * the sum of total allocations went down by 6-7%

# Motivation

Haddock is moving towards working entirely over `.hi` and `.hie` files.
This change means we no longer need the `RenamedSource` from
`TypecheckedModule` (something which is _not_ in `.hi` files).

# Details

Along the way a bunch of things were fixed:

 * Cross package (and other) links are now more reliable (#496)
 * The lexer tries to recover from errors on every line (instead of at CPP
    boundaries)
 * `LINE`/`COLUMN` pragmas are taken into account
 * filter out zero length tokens before rendering
 * avoid recomputing the `ModuleName`-based `SrcMap`
 * remove the last use of `Documentation.Haddock.Utf8` (see  #998)
 * restructure temporary folder logic for `.hi`/`.hie` model
---
 hypsrc-test/ref/src/Operators.html | 1540 +++++++++++++++++++++---------------
 1 file changed, 924 insertions(+), 616 deletions(-)

(limited to 'hypsrc-test/ref/src/Operators.html')

diff --git a/hypsrc-test/ref/src/Operators.html b/hypsrc-test/ref/src/Operators.html
index 8ce0b9ce..403954cf 100644
--- a/hypsrc-test/ref/src/Operators.html
+++ b/hypsrc-test/ref/src/Operators.html
@@ -19,311 +19,414 @@
       ><span
       >
 </span
-      ><a name="line-2"
-      ></a
+      ><span id="line-2"
+      ></span
       ><span
       >
 </span
-      ><a name="line-3"
-      ></a
+      ><span id="line-3"
+      ></span
       ><span
       >
 </span
-      ><a name="line-4"
-      ></a
-      ><span class="hs-special"
-      >(</span
-      ><span class="hs-operator"
-      >+++</span
-      ><span class="hs-special"
-      >)</span
-      ><span
-      > </span
-      ><span class="hs-glyph"
-      >::</span
+      ><span id="line-4"
+      ></span
+      ><span id="local-6989586621679043657"
+      ><span class="annot"
+	><a href="Operators.html#%2B%2B%2B"
+	  ><span class="hs-operator hs-type"
+	    >(+++)</span
+	    ></a
+	  ></span
+	><span
+	> </span
+	><span class="hs-glyph"
+	>::</span
+	><span
+	> </span
+	><span class="hs-special"
+	>[</span
+	><span class="annot"
+	><a href="#"
+	  ><span class="hs-identifier hs-type"
+	    >a</span
+	    ></a
+	  ></span
+	><span class="hs-special"
+	>]</span
+	><span
+	> </span
+	><span class="hs-glyph"
+	>-&gt;</span
+	><span
+	> </span
+	><span class="hs-special"
+	>[</span
+	><span class="annot"
+	><a href="#"
+	  ><span class="hs-identifier hs-type"
+	    >a</span
+	    ></a
+	  ></span
+	><span class="hs-special"
+	>]</span
+	><span
+	> </span
+	><span class="hs-glyph"
+	>-&gt;</span
+	><span
+	> </span
+	><span class="hs-special"
+	>[</span
+	><span class="annot"
+	><a href="#"
+	  ><span class="hs-identifier hs-type"
+	    >a</span
+	    ></a
+	  ></span
+	><span class="hs-special"
+	>]</span
+	></span
       ><span
-      > </span
-      ><span class="hs-special"
-      >[</span
-      ><a href="#"
-      ><span class="hs-identifier hs-type"
-	>a</span
-	></a
-      ><span class="hs-special"
-      >]</span
-      ><span
-      > </span
-      ><span class="hs-glyph"
-      >-&gt;</span
-      ><span
-      > </span
-      ><span class="hs-special"
-      >[</span
-      ><a href="#"
-      ><span class="hs-identifier hs-type"
-	>a</span
-	></a
-      ><span class="hs-special"
-      >]</span
+      >
+</span
+      ><span id="line-5"
+      ></span
+      ><span id="local-6989586621679043655"
+      ><span class="annot"
+	><span class="annottext"
+	  >a :: [a]
+</span
+	  ><a href="#"
+	  ><span class="hs-identifier hs-var"
+	    >a</span
+	    ></a
+	  ></span
+	></span
+      ><span
+      > </span
+      ><span id="%2B%2B%2B"
+      ><span class="annot"
+	><span class="annottext"
+	  >+++ :: [a] -&gt; [a] -&gt; [a]
+</span
+	  ><a href="Operators.html#%2B%2B%2B"
+	  ><span class="hs-operator hs-var hs-var"
+	    >+++</span
+	    ></a
+	  ></span
+	></span
+      ><span
+      > </span
+      ><span id="local-6989586621679043654"
+      ><span class="annot"
+	><span class="annottext"
+	  >b :: [a]
+</span
+	  ><a href="#"
+	  ><span class="hs-identifier hs-var"
+	    >b</span
+	    ></a
+	  ></span
+	></span
       ><span
       > </span
       ><span class="hs-glyph"
-      >-&gt;</span
+      >=</span
       ><span
       > </span
-      ><span class="hs-special"
-      >[</span
-      ><a href="#"
-      ><span class="hs-identifier hs-type"
-	>a</span
-	></a
-      ><span class="hs-special"
-      >]</span
-      ><span
-      >
+      ><span class="annot"
+      ><span class="annottext"
+	>[a]
 </span
-      ><a name="line-5"
-      ></a
-      ><a name=""
-      ><a href="#"
-	><span class="hs-identifier"
+	><a href="#"
+	><span class="hs-identifier hs-var"
 	  >a</span
 	  ></a
-	></a
+	></span
       ><span
       > </span
-      ><a name="%2B%2B%2B"
-      ><a href="Operators.html#%2B%2B%2B"
-	><span class="hs-operator"
-	  >+++</span
-	  ></a
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>[a] -&gt; [a] -&gt; [a]
+forall a. [a] -&gt; [a] -&gt; [a]
+</span
+	><span class="hs-operator hs-var"
+	>++</span
+	></span
       ><span
       > </span
-      ><a name=""
-      ><a href="#"
-	><span class="hs-identifier"
+      ><span class="annot"
+      ><span class="annottext"
+	>[a]
+</span
+	><a href="#"
+	><span class="hs-identifier hs-var"
 	  >b</span
 	  ></a
-	></a
-      ><span
-      > </span
-      ><span class="hs-glyph"
-      >=</span
-      ><span
-      > </span
-      ><a href="#"
-      ><span class="hs-identifier hs-var"
-	>a</span
-	></a
-      ><span
-      > </span
-      ><span class="hs-operator hs-var"
-      >++</span
-      ><span
-      > </span
-      ><a href="#"
-      ><span class="hs-identifier hs-var"
-	>b</span
-	></a
+	></span
       ><span
       > </span
-      ><span class="hs-operator hs-var"
-      >++</span
+      ><span class="annot"
+      ><span class="annottext"
+	>[a] -&gt; [a] -&gt; [a]
+forall a. [a] -&gt; [a] -&gt; [a]
+</span
+	><span class="hs-operator hs-var"
+	>++</span
+	></span
       ><span
       > </span
-      ><a href="#"
-      ><span class="hs-identifier hs-var"
-	>a</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>[a]
+</span
+	><a href="#"
+	><span class="hs-identifier hs-var"
+	  >a</span
+	  ></a
+	></span
       ><span
       >
 </span
-      ><a name="line-6"
-      ></a
+      ><span id="line-6"
+      ></span
       ><span
       >
 </span
-      ><a name="line-7"
-      ></a
-      ><span class="hs-special"
-      >(</span
-      ><span class="hs-operator"
-      >$$$</span
-      ><span class="hs-special"
-      >)</span
-      ><span
-      > </span
-      ><span class="hs-glyph"
-      >::</span
+      ><span id="line-7"
+      ></span
+      ><span id="local-6989586621679043653"
+      ><span class="annot"
+	><a href="Operators.html#%24%24%24"
+	  ><span class="hs-operator hs-type"
+	    >($$$)</span
+	    ></a
+	  ></span
+	><span
+	> </span
+	><span class="hs-glyph"
+	>::</span
+	><span
+	> </span
+	><span class="hs-special"
+	>[</span
+	><span class="annot"
+	><a href="#"
+	  ><span class="hs-identifier hs-type"
+	    >a</span
+	    ></a
+	  ></span
+	><span class="hs-special"
+	>]</span
+	><span
+	> </span
+	><span class="hs-glyph"
+	>-&gt;</span
+	><span
+	> </span
+	><span class="hs-special"
+	>[</span
+	><span class="annot"
+	><a href="#"
+	  ><span class="hs-identifier hs-type"
+	    >a</span
+	    ></a
+	  ></span
+	><span class="hs-special"
+	>]</span
+	><span
+	> </span
+	><span class="hs-glyph"
+	>-&gt;</span
+	><span
+	> </span
+	><span class="hs-special"
+	>[</span
+	><span class="annot"
+	><a href="#"
+	  ><span class="hs-identifier hs-type"
+	    >a</span
+	    ></a
+	  ></span
+	><span class="hs-special"
+	>]</span
+	></span
       ><span
-      > </span
-      ><span class="hs-special"
-      >[</span
-      ><a href="#"
-      ><span class="hs-identifier hs-type"
-	>a</span
-	></a
-      ><span class="hs-special"
-      >]</span
-      ><span
-      > </span
-      ><span class="hs-glyph"
-      >-&gt;</span
-      ><span
-      > </span
-      ><span class="hs-special"
-      >[</span
-      ><a href="#"
-      ><span class="hs-identifier hs-type"
-	>a</span
-	></a
-      ><span class="hs-special"
-      >]</span
+      >
+</span
+      ><span id="line-8"
+      ></span
+      ><span id="local-6989586621679043651"
+      ><span class="annot"
+	><span class="annottext"
+	  >a :: [a]
+</span
+	  ><a href="#"
+	  ><span class="hs-identifier hs-var"
+	    >a</span
+	    ></a
+	  ></span
+	></span
+      ><span
+      > </span
+      ><span id="%24%24%24"
+      ><span class="annot"
+	><span class="annottext"
+	  >$$$ :: [a] -&gt; [a] -&gt; [a]
+</span
+	  ><a href="Operators.html#%24%24%24"
+	  ><span class="hs-operator hs-var hs-var"
+	    >$$$</span
+	    ></a
+	  ></span
+	></span
+      ><span
+      > </span
+      ><span id="local-6989586621679043650"
+      ><span class="annot"
+	><span class="annottext"
+	  >b :: [a]
+</span
+	  ><a href="#"
+	  ><span class="hs-identifier hs-var"
+	    >b</span
+	    ></a
+	  ></span
+	></span
       ><span
       > </span
       ><span class="hs-glyph"
-      >-&gt;</span
+      >=</span
       ><span
       > </span
-      ><span class="hs-special"
-      >[</span
-      ><a href="#"
-      ><span class="hs-identifier hs-type"
-	>a</span
-	></a
-      ><span class="hs-special"
-      >]</span
-      ><span
-      >
+      ><span class="annot"
+      ><span class="annottext"
+	>[a]
 </span
-      ><a name="line-8"
-      ></a
-      ><a name=""
-      ><a href="#"
-	><span class="hs-identifier"
-	  >a</span
+	><a href="#"
+	><span class="hs-identifier hs-var"
+	  >b</span
 	  ></a
-	></a
+	></span
       ><span
       > </span
-      ><a name="%24%24%24"
-      ><a href="Operators.html#%24%24%24"
-	><span class="hs-operator"
-	  >$$$</span
+      ><span class="annot"
+      ><span class="annottext"
+	>[a] -&gt; [a] -&gt; [a]
+forall a. [a] -&gt; [a] -&gt; [a]
+</span
+	><a href="Operators.html#%2B%2B%2B"
+	><span class="hs-operator hs-var"
+	  >+++</span
 	  ></a
-	></a
+	></span
       ><span
       > </span
-      ><a name=""
-      ><a href="#"
-	><span class="hs-identifier"
-	  >b</span
+      ><span class="annot"
+      ><span class="annottext"
+	>[a]
+</span
+	><a href="#"
+	><span class="hs-identifier hs-var"
+	  >a</span
 	  ></a
-	></a
-      ><span
-      > </span
-      ><span class="hs-glyph"
-      >=</span
-      ><span
-      > </span
-      ><a href="#"
-      ><span class="hs-identifier hs-var"
-	>b</span
-	></a
-      ><span
-      > </span
-      ><a href="Operators.html#%2B%2B%2B"
-      ><span class="hs-operator hs-var"
-	>+++</span
-	></a
-      ><span
-      > </span
-      ><a href="#"
-      ><span class="hs-identifier hs-var"
-	>a</span
-	></a
+	></span
       ><span
       >
 </span
-      ><a name="line-9"
-      ></a
+      ><span id="line-9"
+      ></span
       ><span
       >
 </span
-      ><a name="line-10"
-      ></a
-      ><span class="hs-special"
-      >(</span
-      ><span class="hs-operator"
-      >***</span
-      ><span class="hs-special"
-      >)</span
-      ><span
-      > </span
-      ><span class="hs-glyph"
-      >::</span
-      ><span
-      > </span
-      ><span class="hs-special"
-      >[</span
-      ><a href="#"
-      ><span class="hs-identifier hs-type"
-	>a</span
-	></a
-      ><span class="hs-special"
-      >]</span
-      ><span
-      > </span
-      ><span class="hs-glyph"
-      >-&gt;</span
-      ><span
-      > </span
-      ><span class="hs-special"
-      >[</span
-      ><a href="#"
-      ><span class="hs-identifier hs-type"
-	>a</span
-	></a
-      ><span class="hs-special"
-      >]</span
-      ><span
-      > </span
-      ><span class="hs-glyph"
-      >-&gt;</span
-      ><span
-      > </span
-      ><span class="hs-special"
-      >[</span
-      ><a href="#"
-      ><span class="hs-identifier hs-type"
-	>a</span
-	></a
-      ><span class="hs-special"
-      >]</span
+      ><span id="line-10"
+      ></span
+      ><span id="local-6989586621679043649"
+      ><span class="annot"
+	><a href="Operators.html#%2A%2A%2A"
+	  ><span class="hs-operator hs-type"
+	    >(***)</span
+	    ></a
+	  ></span
+	><span
+	> </span
+	><span class="hs-glyph"
+	>::</span
+	><span
+	> </span
+	><span class="hs-special"
+	>[</span
+	><span class="annot"
+	><a href="#"
+	  ><span class="hs-identifier hs-type"
+	    >a</span
+	    ></a
+	  ></span
+	><span class="hs-special"
+	>]</span
+	><span
+	> </span
+	><span class="hs-glyph"
+	>-&gt;</span
+	><span
+	> </span
+	><span class="hs-special"
+	>[</span
+	><span class="annot"
+	><a href="#"
+	  ><span class="hs-identifier hs-type"
+	    >a</span
+	    ></a
+	  ></span
+	><span class="hs-special"
+	>]</span
+	><span
+	> </span
+	><span class="hs-glyph"
+	>-&gt;</span
+	><span
+	> </span
+	><span class="hs-special"
+	>[</span
+	><span class="annot"
+	><a href="#"
+	  ><span class="hs-identifier hs-type"
+	    >a</span
+	    ></a
+	  ></span
+	><span class="hs-special"
+	>]</span
+	></span
       ><span
       >
 </span
-      ><a name="line-11"
-      ></a
-      ><span class="hs-special"
-      >(</span
-      ><a name="%2A%2A%2A"
-      ><a href="Operators.html#%2A%2A%2A"
-	><span class="hs-operator"
-	  >***</span
-	  ></a
-	></a
-      ><span class="hs-special"
-      >)</span
-      ><span
-      > </span
-      ><a name=""
-      ><a href="#"
-	><span class="hs-identifier"
-	  >a</span
-	  ></a
-	></a
+      ><span id="line-11"
+      ></span
+      ><span id="%2A%2A%2A"
+      ><span class="annot"
+	><span class="annottext"
+	  >*** :: [a] -&gt; [a] -&gt; [a]
+</span
+	  ><a href="Operators.html#%2A%2A%2A"
+	  ><span class="hs-operator hs-var hs-var"
+	    >(***)</span
+	    ></a
+	  ></span
+	></span
+      ><span
+      > </span
+      ><span id="local-6989586621679043647"
+      ><span class="annot"
+	><span class="annottext"
+	  >a :: [a]
+</span
+	  ><a href="#"
+	  ><span class="hs-identifier hs-var"
+	    >a</span
+	    ></a
+	  ></span
+	></span
       ><span
       > </span
       ><span class="hs-special"
@@ -336,43 +439,60 @@
       >=</span
       ><span
       > </span
-      ><a href="#"
-      ><span class="hs-identifier hs-var"
-	>a</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>[a]
+</span
+	><a href="#"
+	><span class="hs-identifier hs-var"
+	  >a</span
+	  ></a
+	></span
       ><span
       >
 </span
-      ><a name="line-12"
-      ></a
-      ><span class="hs-special"
-      >(</span
-      ><span class="hs-operator"
-      >***</span
-      ><span class="hs-special"
-      >)</span
+      ><span id="line-12"
+      ></span
+      ><span class="annot"
+      ><a href="Operators.html#%2A%2A%2A"
+	><span class="hs-operator hs-var"
+	  >(***)</span
+	  ></a
+	></span
       ><span
       > </span
-      ><a name=""
-      ><a href="#"
-	><span class="hs-identifier"
-	  >a</span
-	  ></a
-	></a
+      ><span id="local-6989586621679043646"
+      ><span class="annot"
+	><span class="annottext"
+	  >a :: [a]
+</span
+	  ><a href="#"
+	  ><span class="hs-identifier hs-var"
+	    >a</span
+	    ></a
+	  ></span
+	></span
       ><span
       > </span
       ><span class="hs-special"
       >(</span
       ><span class="hs-identifier"
       >_</span
-      ><span class="hs-glyph"
-      >:</span
-      ><a name=""
-      ><a href="#"
-	><span class="hs-identifier"
-	  >b</span
-	  ></a
-	></a
+      ><span class="annot"
+      ><span class="hs-glyph hs-type"
+	>:</span
+	></span
+      ><span id="local-6989586621679043645"
+      ><span class="annot"
+	><span class="annottext"
+	  >b :: [a]
+</span
+	  ><a href="#"
+	  ><span class="hs-identifier hs-var"
+	    >b</span
+	    ></a
+	  ></span
+	></span
       ><span class="hs-special"
       >)</span
       ><span
@@ -381,455 +501,643 @@
       >=</span
       ><span
       > </span
-      ><a href="#"
-      ><span class="hs-identifier hs-var"
-	>a</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>[a]
+</span
+	><a href="#"
+	><span class="hs-identifier hs-var"
+	  >a</span
+	  ></a
+	></span
       ><span
       > </span
-      ><a href="Operators.html#%2B%2B%2B"
-      ><span class="hs-operator hs-var"
-	>+++</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>[a] -&gt; [a] -&gt; [a]
+forall a. [a] -&gt; [a] -&gt; [a]
+</span
+	><a href="Operators.html#%2B%2B%2B"
+	><span class="hs-operator hs-var"
+	  >+++</span
+	  ></a
+	></span
       ><span
       > </span
       ><span class="hs-special"
       >(</span
-      ><a href="#"
-      ><span class="hs-identifier hs-var"
-	>a</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>[a]
+</span
+	><a href="#"
+	><span class="hs-identifier hs-var"
+	  >a</span
+	  ></a
+	></span
       ><span
       > </span
-      ><a href="Operators.html#%2A%2A%2A"
-      ><span class="hs-operator hs-var"
-	>***</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>[a] -&gt; [a] -&gt; [a]
+forall a. [a] -&gt; [a] -&gt; [a]
+</span
+	><a href="Operators.html#%2A%2A%2A"
+	><span class="hs-operator hs-var"
+	  >***</span
+	  ></a
+	></span
       ><span
       > </span
-      ><a href="#"
-      ><span class="hs-identifier hs-var"
-	>b</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>[a]
+</span
+	><a href="#"
+	><span class="hs-identifier hs-var"
+	  >b</span
+	  ></a
+	></span
       ><span class="hs-special"
       >)</span
       ><span
       >
 </span
-      ><a name="line-13"
-      ></a
+      ><span id="line-13"
+      ></span
       ><span
       >
 </span
-      ><a name="line-14"
-      ></a
-      ><span class="hs-special"
-      >(</span
-      ><span class="hs-operator"
-      >*/\*</span
-      ><span class="hs-special"
-      >)</span
-      ><span
-      > </span
-      ><span class="hs-glyph"
-      >::</span
-      ><span
-      > </span
-      ><span class="hs-special"
-      >[</span
-      ><span class="hs-special"
-      >[</span
-      ><a href="#"
-      ><span class="hs-identifier hs-type"
-	>a</span
-	></a
-      ><span class="hs-special"
-      >]</span
-      ><span class="hs-special"
-      >]</span
-      ><span
-      > </span
-      ><span class="hs-glyph"
-      >-&gt;</span
-      ><span
-      > </span
-      ><span class="hs-special"
-      >[</span
-      ><a href="#"
-      ><span class="hs-identifier hs-type"
-	>a</span
-	></a
-      ><span class="hs-special"
-      >]</span
-      ><span
-      > </span
-      ><span class="hs-glyph"
-      >-&gt;</span
-      ><span
-      > </span
-      ><span class="hs-special"
-      >[</span
-      ><a href="#"
-      ><span class="hs-identifier hs-type"
-	>a</span
-	></a
-      ><span class="hs-special"
-      >]</span
+      ><span id="line-14"
+      ></span
+      ><span id="local-6989586621679043666"
+      ><span class="annot"
+	><a href="Operators.html#%2A%2F%5C%2A"
+	  ><span class="hs-operator hs-type"
+	    >(*/\*)</span
+	    ></a
+	  ></span
+	><span
+	> </span
+	><span class="hs-glyph"
+	>::</span
+	><span
+	> </span
+	><span class="hs-special"
+	>[</span
+	><span class="hs-special"
+	>[</span
+	><span class="annot"
+	><a href="#"
+	  ><span class="hs-identifier hs-type"
+	    >a</span
+	    ></a
+	  ></span
+	><span class="hs-special"
+	>]</span
+	><span class="hs-special"
+	>]</span
+	><span
+	> </span
+	><span class="hs-glyph"
+	>-&gt;</span
+	><span
+	> </span
+	><span class="hs-special"
+	>[</span
+	><span class="annot"
+	><a href="#"
+	  ><span class="hs-identifier hs-type"
+	    >a</span
+	    ></a
+	  ></span
+	><span class="hs-special"
+	>]</span
+	><span
+	> </span
+	><span class="hs-glyph"
+	>-&gt;</span
+	><span
+	> </span
+	><span class="hs-special"
+	>[</span
+	><span class="annot"
+	><a href="#"
+	  ><span class="hs-identifier hs-type"
+	    >a</span
+	    ></a
+	  ></span
+	><span class="hs-special"
+	>]</span
+	></span
       ><span
       >
 </span
-      ><a name="line-15"
-      ></a
-      ><a name=""
-      ><a href="#"
-	><span class="hs-identifier"
-	  >a</span
-	  ></a
-	></a
-      ><span
-      > </span
-      ><a name="%2A%2F%5C%2A"
-      ><a href="Operators.html#%2A%2F%5C%2A"
-	><span class="hs-operator"
-	  >*/\*</span
-	  ></a
-	></a
-      ><span
-      > </span
-      ><a name=""
-      ><a href="#"
-	><span class="hs-identifier"
-	  >b</span
-	  ></a
-	></a
+      ><span id="line-15"
+      ></span
+      ><span id="local-6989586621679043643"
+      ><span class="annot"
+	><span class="annottext"
+	  >a :: [[a]]
+</span
+	  ><a href="#"
+	  ><span class="hs-identifier hs-var"
+	    >a</span
+	    ></a
+	  ></span
+	></span
+      ><span
+      > </span
+      ><span id="%2A%2F%5C%2A"
+      ><span class="annot"
+	><span class="annottext"
+	  >*/\* :: [[a]] -&gt; [a] -&gt; [a]
+</span
+	  ><a href="Operators.html#%2A%2F%5C%2A"
+	  ><span class="hs-operator hs-var hs-var"
+	    >*/\*</span
+	    ></a
+	  ></span
+	></span
+      ><span
+      > </span
+      ><span id="local-6989586621679043642"
+      ><span class="annot"
+	><span class="annottext"
+	  >b :: [a]
+</span
+	  ><a href="#"
+	  ><span class="hs-identifier hs-var"
+	    >b</span
+	    ></a
+	  ></span
+	></span
       ><span
       > </span
       ><span class="hs-glyph"
       >=</span
       ><span
       > </span
-      ><span class="hs-identifier hs-var"
-      >concatMap</span
+      ><span class="annot"
+      ><span class="annottext"
+	>([a] -&gt; [a]) -&gt; [[a]] -&gt; [a]
+forall (t :: * -&gt; *) a b. Foldable t =&gt; (a -&gt; [b]) -&gt; t a -&gt; [b]
+</span
+	><span class="hs-identifier hs-var"
+	>concatMap</span
+	></span
       ><span
       > </span
       ><span class="hs-special"
       >(</span
-      ><a href="Operators.html#%2A%2A%2A"
-      ><span class="hs-operator hs-var"
-	>***</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>[a] -&gt; [a] -&gt; [a]
+forall a. [a] -&gt; [a] -&gt; [a]
+</span
+	><a href="Operators.html#%2A%2A%2A"
+	><span class="hs-operator hs-var"
+	  >***</span
+	  ></a
+	></span
       ><span
       > </span
-      ><a href="#"
-      ><span class="hs-identifier hs-var"
-	>b</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>[a]
+</span
+	><a href="#"
+	><span class="hs-identifier hs-var"
+	  >b</span
+	  ></a
+	></span
       ><span class="hs-special"
       >)</span
       ><span
       > </span
-      ><a href="#"
-      ><span class="hs-identifier hs-var"
-	>a</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>[[a]]
+</span
+	><a href="#"
+	><span class="hs-identifier hs-var"
+	  >a</span
+	  ></a
+	></span
       ><span
       >
 </span
-      ><a name="line-16"
-      ></a
+      ><span id="line-16"
+      ></span
       ><span
       >
 </span
-      ><a name="line-17"
-      ></a
-      ><span class="hs-special"
-      >(</span
-      ><span class="hs-operator"
-      >**/\**</span
-      ><span class="hs-special"
-      >)</span
+      ><span id="line-17"
+      ></span
+      ><span id="local-6989586621679043640"
+      ><span class="annot"
+	><a href="Operators.html#%2A%2A%2F%5C%2A%2A"
+	  ><span class="hs-operator hs-type"
+	    >(**/\**)</span
+	    ></a
+	  ></span
+	><span
+	> </span
+	><span class="hs-glyph"
+	>::</span
+	><span
+	> </span
+	><span class="hs-special"
+	>[</span
+	><span class="hs-special"
+	>[</span
+	><span class="annot"
+	><a href="#"
+	  ><span class="hs-identifier hs-type"
+	    >a</span
+	    ></a
+	  ></span
+	><span class="hs-special"
+	>]</span
+	><span class="hs-special"
+	>]</span
+	><span
+	> </span
+	><span class="hs-glyph"
+	>-&gt;</span
+	><span
+	> </span
+	><span class="hs-special"
+	>[</span
+	><span class="hs-special"
+	>[</span
+	><span class="annot"
+	><a href="#"
+	  ><span class="hs-identifier hs-type"
+	    >a</span
+	    ></a
+	  ></span
+	><span class="hs-special"
+	>]</span
+	><span class="hs-special"
+	>]</span
+	><span
+	> </span
+	><span class="hs-glyph"
+	>-&gt;</span
+	><span
+	> </span
+	><span class="hs-special"
+	>[</span
+	><span class="hs-special"
+	>[</span
+	><span class="annot"
+	><a href="#"
+	  ><span class="hs-identifier hs-type"
+	    >a</span
+	    ></a
+	  ></span
+	><span class="hs-special"
+	>]</span
+	><span class="hs-special"
+	>]</span
+	></span
       ><span
-      > </span
-      ><span class="hs-glyph"
-      >::</span
-      ><span
-      > </span
-      ><span class="hs-special"
-      >[</span
-      ><span class="hs-special"
-      >[</span
-      ><a href="#"
-      ><span class="hs-identifier hs-type"
-	>a</span
-	></a
-      ><span class="hs-special"
-      >]</span
-      ><span class="hs-special"
-      >]</span
+      >
+</span
+      ><span id="line-18"
+      ></span
+      ><span id="local-6989586621679043638"
+      ><span class="annot"
+	><span class="annottext"
+	  >a :: [[a]]
+</span
+	  ><a href="#"
+	  ><span class="hs-identifier hs-var"
+	    >a</span
+	    ></a
+	  ></span
+	></span
+      ><span
+      > </span
+      ><span id="%2A%2A%2F%5C%2A%2A"
+      ><span class="annot"
+	><span class="annottext"
+	  >**/\** :: [[a]] -&gt; [[a]] -&gt; [[a]]
+</span
+	  ><a href="Operators.html#%2A%2A%2F%5C%2A%2A"
+	  ><span class="hs-operator hs-var hs-var"
+	    >**/\**</span
+	    ></a
+	  ></span
+	></span
+      ><span
+      > </span
+      ><span id="local-6989586621679043637"
+      ><span class="annot"
+	><span class="annottext"
+	  >b :: [[a]]
+</span
+	  ><a href="#"
+	  ><span class="hs-identifier hs-var"
+	    >b</span
+	    ></a
+	  ></span
+	></span
       ><span
       > </span
       ><span class="hs-glyph"
-      >-&gt;</span
+      >=</span
       ><span
       > </span
-      ><span class="hs-special"
-      >[</span
-      ><span class="hs-special"
-      >[</span
-      ><a href="#"
-      ><span class="hs-identifier hs-type"
-	>a</span
-	></a
-      ><span class="hs-special"
-      >]</span
-      ><span class="hs-special"
-      >]</span
+      ><span class="annot"
+      ><span class="annottext"
+	>([[a]] -&gt; [a] -&gt; [a]) -&gt; [[[a]]] -&gt; [[a]] -&gt; [[a]]
+forall a b c. (a -&gt; b -&gt; c) -&gt; [a] -&gt; [b] -&gt; [c]
+</span
+	><span class="hs-identifier hs-var"
+	>zipWith</span
+	></span
       ><span
       > </span
-      ><span class="hs-glyph"
-      >-&gt;</span
+      ><span class="annot"
+      ><span class="annottext"
+	>[[a]] -&gt; [a] -&gt; [a]
+forall a. [[a]] -&gt; [a] -&gt; [a]
+</span
+	><a href="Operators.html#%2A%2F%5C%2A"
+	><span class="hs-operator hs-var"
+	  >(*/\*)</span
+	  ></a
+	></span
       ><span
       > </span
       ><span class="hs-special"
       >[</span
-      ><span class="hs-special"
-      >[</span
-      ><a href="#"
-      ><span class="hs-identifier hs-type"
-	>a</span
-	></a
-      ><span class="hs-special"
-      >]</span
-      ><span class="hs-special"
-      >]</span
-      ><span
-      >
+      ><span class="annot"
+      ><span class="annottext"
+	>[[a]]
 </span
-      ><a name="line-18"
-      ></a
-      ><a name=""
-      ><a href="#"
-	><span class="hs-identifier"
+	><a href="#"
+	><span class="hs-identifier hs-var"
 	  >a</span
 	  ></a
-	></a
+	></span
       ><span
       > </span
-      ><a name="%2A%2A%2F%5C%2A%2A"
-      ><a href="Operators.html#%2A%2A%2F%5C%2A%2A"
-	><span class="hs-operator"
-	  >**/\**</span
+      ><span class="annot"
+      ><span class="annottext"
+	>[[a]] -&gt; [[a]] -&gt; [[a]]
+forall a. [a] -&gt; [a] -&gt; [a]
+</span
+	><a href="Operators.html#%2B%2B%2B"
+	><span class="hs-operator hs-var"
+	  >+++</span
 	  ></a
-	></a
+	></span
       ><span
       > </span
-      ><a name=""
-      ><a href="#"
-	><span class="hs-identifier"
+      ><span class="annot"
+      ><span class="annottext"
+	>[[a]]
+</span
+	><a href="#"
+	><span class="hs-identifier hs-var"
 	  >b</span
 	  ></a
-	></a
-      ><span
-      > </span
-      ><span class="hs-glyph"
-      >=</span
-      ><span
-      > </span
-      ><span class="hs-identifier hs-var"
-      >zipWith</span
-      ><span
-      > </span
-      ><span class="hs-special"
-      >(</span
-      ><a href="Operators.html#%2A%2F%5C%2A"
-      ><span class="hs-operator hs-var"
-	>*/\*</span
-	></a
-      ><span class="hs-special"
-      >)</span
-      ><span
-      > </span
-      ><span class="hs-special"
-      >[</span
-      ><a href="#"
-      ><span class="hs-identifier hs-var"
-	>a</span
-	></a
-      ><span
-      > </span
-      ><a href="Operators.html#%2B%2B%2B"
-      ><span class="hs-operator hs-var"
-	>+++</span
-	></a
-      ><span
-      > </span
-      ><a href="#"
-      ><span class="hs-identifier hs-var"
-	>b</span
-	></a
+	></span
       ><span class="hs-special"
       >]</span
       ><span
       > </span
       ><span class="hs-special"
       >(</span
-      ><a href="#"
-      ><span class="hs-identifier hs-var"
-	>a</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>[[a]]
+</span
+	><a href="#"
+	><span class="hs-identifier hs-var"
+	  >a</span
+	  ></a
+	></span
       ><span
       > </span
-      ><a href="Operators.html#%24%24%24"
-      ><span class="hs-operator hs-var"
-	>$$$</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>[[a]] -&gt; [[a]] -&gt; [[a]]
+forall a. [a] -&gt; [a] -&gt; [a]
+</span
+	><a href="Operators.html#%24%24%24"
+	><span class="hs-operator hs-var"
+	  >$$$</span
+	  ></a
+	></span
       ><span
       > </span
-      ><a href="#"
-      ><span class="hs-identifier hs-var"
-	>b</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>[[a]]
+</span
+	><a href="#"
+	><span class="hs-identifier hs-var"
+	  >b</span
+	  ></a
+	></span
       ><span class="hs-special"
       >)</span
       ><span
       >
 </span
-      ><a name="line-19"
-      ></a
+      ><span id="line-19"
+      ></span
       ><span
       >
 </span
-      ><a name="line-20"
-      ></a
+      ><span id="line-20"
+      ></span
       ><span
       >
 </span
-      ><a name="line-21"
-      ></a
-      ><span class="hs-special"
-      >(</span
-      ><span class="hs-operator"
-      >#.#</span
-      ><span class="hs-special"
-      >)</span
-      ><span
-      > </span
-      ><span class="hs-glyph"
-      >::</span
-      ><span
-      > </span
-      ><a href="#"
-      ><span class="hs-identifier hs-type"
-	>a</span
-	></a
-      ><span
-      > </span
-      ><span class="hs-glyph"
-      >-&gt;</span
-      ><span
-      > </span
-      ><a href="#"
-      ><span class="hs-identifier hs-type"
-	>b</span
-	></a
-      ><span
-      > </span
-      ><span class="hs-glyph"
-      >-&gt;</span
-      ><span
-      > </span
-      ><span class="hs-special"
-      >(</span
-      ><a href="#"
-      ><span class="hs-identifier hs-type"
-	>c</span
-	></a
-      ><span
-      > </span
-      ><span class="hs-glyph"
-      >-&gt;</span
-      ><span
-      > </span
-      ><span class="hs-special"
-      >(</span
-      ><a href="#"
-      ><span class="hs-identifier hs-type"
-	>a</span
-	></a
-      ><span class="hs-special"
-      >,</span
-      ><span
-      > </span
-      ><a href="#"
-      ><span class="hs-identifier hs-type"
-	>b</span
-	></a
-      ><span class="hs-special"
-      >)</span
-      ><span class="hs-special"
-      >)</span
+      ><span id="line-21"
+      ></span
+      ><span id="local-6989586621679043633"
+      ><span id="local-6989586621679043634"
+	><span id="local-6989586621679043635"
+	  ><span class="annot"
+	    ><a href="Operators.html#%23.%23"
+	      ><span class="hs-operator hs-type"
+		>(#.#)</span
+		></a
+	      ></span
+	    ><span
+	    > </span
+	    ><span class="hs-glyph"
+	    >::</span
+	    ><span
+	    > </span
+	    ><span class="annot"
+	    ><a href="#"
+	      ><span class="hs-identifier hs-type"
+		>a</span
+		></a
+	      ></span
+	    ><span
+	    > </span
+	    ><span class="hs-glyph"
+	    >-&gt;</span
+	    ><span
+	    > </span
+	    ><span class="annot"
+	    ><a href="#"
+	      ><span class="hs-identifier hs-type"
+		>b</span
+		></a
+	      ></span
+	    ><span
+	    > </span
+	    ><span class="hs-glyph"
+	    >-&gt;</span
+	    ><span
+	    > </span
+	    ><span class="hs-special"
+	    >(</span
+	    ><span class="annot"
+	    ><a href="#"
+	      ><span class="hs-identifier hs-type"
+		>c</span
+		></a
+	      ></span
+	    ><span
+	    > </span
+	    ><span class="hs-glyph"
+	    >-&gt;</span
+	    ><span
+	    > </span
+	    ><span class="hs-special"
+	    >(</span
+	    ><span class="annot"
+	    ><a href="#"
+	      ><span class="hs-identifier hs-type"
+		>a</span
+		></a
+	      ></span
+	    ><span class="hs-special"
+	    >,</span
+	    ><span
+	    > </span
+	    ><span class="annot"
+	    ><a href="#"
+	      ><span class="hs-identifier hs-type"
+		>b</span
+		></a
+	      ></span
+	    ><span class="hs-special"
+	    >)</span
+	    ><span class="hs-special"
+	    >)</span
+	    ></span
+	  ></span
+	></span
       ><span
       >
 </span
-      ><a name="line-22"
-      ></a
-      ><a name=""
-      ><a href="#"
-	><span class="hs-identifier"
-	  >a</span
-	  ></a
-	></a
-      ><span
-      > </span
-      ><a name="%23.%23"
-      ><a href="Operators.html#%23.%23"
-	><span class="hs-operator"
-	  >#.#</span
-	  ></a
-	></a
-      ><span
-      > </span
-      ><a name=""
-      ><a href="#"
-	><span class="hs-identifier"
-	  >b</span
-	  ></a
-	></a
+      ><span id="line-22"
+      ></span
+      ><span id="local-6989586621679043631"
+      ><span class="annot"
+	><span class="annottext"
+	  >a :: a
+</span
+	  ><a href="#"
+	  ><span class="hs-identifier hs-var"
+	    >a</span
+	    ></a
+	  ></span
+	></span
+      ><span
+      > </span
+      ><span id="%23.%23"
+      ><span class="annot"
+	><span class="annottext"
+	  >#.# :: a -&gt; b -&gt; c -&gt; (a, b)
+</span
+	  ><a href="Operators.html#%23.%23"
+	  ><span class="hs-operator hs-var hs-var"
+	    >#.#</span
+	    ></a
+	  ></span
+	></span
+      ><span
+      > </span
+      ><span id="local-6989586621679043630"
+      ><span class="annot"
+	><span class="annottext"
+	  >b :: b
+</span
+	  ><a href="#"
+	  ><span class="hs-identifier hs-var"
+	    >b</span
+	    ></a
+	  ></span
+	></span
       ><span
       > </span
       ><span class="hs-glyph"
       >=</span
       ><span
       > </span
-      ><span class="hs-identifier hs-var"
-      >const</span
+      ><span class="annot"
+      ><span class="annottext"
+	>(a, b) -&gt; c -&gt; (a, b)
+forall a b. a -&gt; b -&gt; a
+</span
+	><span class="hs-identifier hs-var"
+	>const</span
+	></span
       ><span
       > </span
-      ><span class="hs-operator hs-var"
-      >$</span
+      ><span class="annot"
+      ><span class="annottext"
+	>((a, b) -&gt; c -&gt; (a, b)) -&gt; (a, b) -&gt; c -&gt; (a, b)
+forall a b. (a -&gt; b) -&gt; a -&gt; b
+</span
+	><span class="hs-operator hs-var"
+	>$</span
+	></span
       ><span
       > </span
       ><span class="hs-special"
       >(</span
-      ><a href="#"
-      ><span class="hs-identifier hs-var"
-	>a</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>a
+</span
+	><a href="#"
+	><span class="hs-identifier hs-var"
+	  >a</span
+	  ></a
+	></span
       ><span class="hs-special"
       >,</span
       ><span
       > </span
-      ><a href="#"
-      ><span class="hs-identifier hs-var"
-	>b</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>b
+</span
+	><a href="#"
+	><span class="hs-identifier hs-var"
+	  >b</span
+	  ></a
+	></span
       ><span class="hs-special"
       >)</span
       ><span
       >
 </span
-      ><a name="line-23"
-      ></a
+      ><span id="line-23"
+      ></span
       ></pre
     ></body
   ></html
-- 
cgit v1.2.3