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/Identifiers.html | 1485 +++++++++++++++++++++++-----------
 1 file changed, 1020 insertions(+), 465 deletions(-)

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

diff --git a/hypsrc-test/ref/src/Identifiers.html b/hypsrc-test/ref/src/Identifiers.html
index ce69ad37..301761c1 100644
--- a/hypsrc-test/ref/src/Identifiers.html
+++ b/hypsrc-test/ref/src/Identifiers.html
@@ -19,641 +19,1040 @@
       ><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-identifier"
-      >foo</span
+      ><span id="line-4"
+      ></span
+      ><span class="annot"
+      ><a href="Identifiers.html#foo"
+	><span class="hs-identifier hs-type"
+	  >foo</span
+	  ></a
+	></span
       ><span class="hs-special"
       >,</span
       ><span
       > </span
-      ><span class="hs-identifier"
-      >bar</span
+      ><span class="annot"
+      ><a href="Identifiers.html#bar"
+	><span class="hs-identifier hs-type"
+	  >bar</span
+	  ></a
+	></span
       ><span class="hs-special"
       >,</span
       ><span
       > </span
-      ><span class="hs-identifier"
-      >baz</span
+      ><span class="annot"
+      ><a href="Identifiers.html#baz"
+	><span class="hs-identifier hs-type"
+	  >baz</span
+	  ></a
+	></span
       ><span
       > </span
       ><span class="hs-glyph"
       >::</span
       ><span
       > </span
+      ><span class="annot"
       ><span class="hs-identifier hs-type"
-      >Int</span
+	>Int</span
+	></span
       ><span
       > </span
       ><span class="hs-glyph"
       >-&gt;</span
       ><span
       > </span
+      ><span class="annot"
       ><span class="hs-identifier hs-type"
-      >Int</span
+	>Int</span
+	></span
       ><span
       > </span
       ><span class="hs-glyph"
       >-&gt;</span
       ><span
       > </span
+      ><span class="annot"
       ><span class="hs-identifier hs-type"
-      >Int</span
+	>Int</span
+	></span
       ><span
       >
 </span
-      ><a name="line-5"
-      ></a
-      ><a name="foo"
-      ><a href="Identifiers.html#foo"
-	><span class="hs-identifier"
-	  >foo</span
-	  ></a
-	></a
-      ><span
-      > </span
-      ><a name=""
-      ><a href="#"
-	><span class="hs-identifier"
-	  >x</span
-	  ></a
-	></a
-      ><span
-      > </span
-      ><a name=""
-      ><a href="#"
-	><span class="hs-identifier"
-	  >y</span
-	  ></a
-	></a
+      ><span id="line-5"
+      ></span
+      ><span id="foo"
+      ><span class="annot"
+	><span class="annottext"
+	  >foo :: Int -&gt; Int -&gt; Int
+</span
+	  ><a href="Identifiers.html#foo"
+	  ><span class="hs-identifier hs-var hs-var"
+	    >foo</span
+	    ></a
+	  ></span
+	></span
+      ><span
+      > </span
+      ><span id="local-6989586621679043592"
+      ><span class="annot"
+	><span class="annottext"
+	  >x :: Int
+</span
+	  ><a href="#"
+	  ><span class="hs-identifier hs-var"
+	    >x</span
+	    ></a
+	  ></span
+	></span
+      ><span
+      > </span
+      ><span id="local-6989586621679043591"
+      ><span class="annot"
+	><span class="annottext"
+	  >y :: Int
+</span
+	  ><a href="#"
+	  ><span class="hs-identifier hs-var"
+	    >y</span
+	    ></a
+	  ></span
+	></span
       ><span
       > </span
       ><span class="hs-glyph"
       >=</span
       ><span
       > </span
-      ><a href="#"
-      ><span class="hs-identifier hs-var"
-	>x</span
-	></a
-      ><span
-      > </span
-      ><span class="hs-operator hs-var"
-      >+</span
-      ><span
-      > </span
-      ><a href="#"
-      ><span class="hs-identifier hs-var"
-	>x</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>Int
+</span
+	><a href="#"
+	><span class="hs-identifier hs-var"
+	  >x</span
+	  ></a
+	></span
       ><span
       > </span
-      ><span class="hs-operator hs-var"
-      >*</span
+      ><span class="annot"
+      ><span class="annottext"
+	>Int -&gt; Int -&gt; Int
+forall a. Num a =&gt; a -&gt; a -&gt; a
+</span
+	><span class="hs-operator hs-var"
+	>+</span
+	></span
       ><span
       > </span
-      ><a href="Identifiers.html#bar"
-      ><span class="hs-identifier hs-var"
-	>bar</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>Int
+</span
+	><a href="#"
+	><span class="hs-identifier hs-var"
+	  >x</span
+	  ></a
+	></span
       ><span
       > </span
-      ><a href="#"
-      ><span class="hs-identifier hs-var"
-	>y</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>Int -&gt; Int -&gt; Int
+forall a. Num a =&gt; a -&gt; a -&gt; a
+</span
+	><span class="hs-operator hs-var"
+	>*</span
+	></span
       ><span
       > </span
-      ><a href="#"
-      ><span class="hs-identifier hs-var"
-	>x</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>Int -&gt; Int -&gt; Int
+</span
+	><a href="Identifiers.html#bar"
+	><span class="hs-identifier hs-var"
+	  >bar</span
+	  ></a
+	></span
       ><span
       > </span
-      ><span class="hs-operator hs-var"
-      >*</span
+      ><span class="annot"
+      ><span class="annottext"
+	>Int
+</span
+	><a href="#"
+	><span class="hs-identifier hs-var"
+	  >y</span
+	  ></a
+	></span
       ><span
       > </span
-      ><a href="#"
-      ><span class="hs-identifier hs-var"
-	>y</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>Int
+</span
+	><a href="#"
+	><span class="hs-identifier hs-var"
+	  >x</span
+	  ></a
+	></span
       ><span
       > </span
-      ><span class="hs-operator hs-var"
-      >+</span
+      ><span class="annot"
+      ><span class="annottext"
+	>Int -&gt; Int -&gt; Int
+forall a. Num a =&gt; a -&gt; a -&gt; a
+</span
+	><span class="hs-operator hs-var"
+	>*</span
+	></span
       ><span
       > </span
-      ><a href="#"
-      ><span class="hs-identifier hs-var"
-	>y</span
-	></a
-      ><span
-      >
+      ><span class="annot"
+      ><span class="annottext"
+	>Int
 </span
-      ><a name="line-6"
-      ></a
-      ><a name="bar"
-      ><a href="Identifiers.html#bar"
-	><span class="hs-identifier"
-	  >bar</span
+	><a href="#"
+	><span class="hs-identifier hs-var"
+	  >y</span
 	  ></a
-	></a
+	></span
       ><span
       > </span
-      ><a name=""
-      ><a href="#"
-	><span class="hs-identifier"
-	  >x</span
-	  ></a
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>Int -&gt; Int -&gt; Int
+forall a. Num a =&gt; 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"
+	>Int
+</span
+	><a href="#"
+	><span class="hs-identifier hs-var"
 	  >y</span
 	  ></a
-	></a
+	></span
+      ><span
+      >
+</span
+      ><span id="line-6"
+      ></span
+      ><span id="bar"
+      ><span class="annot"
+	><span class="annottext"
+	  >bar :: Int -&gt; Int -&gt; Int
+</span
+	  ><a href="Identifiers.html#bar"
+	  ><span class="hs-identifier hs-var hs-var"
+	    >bar</span
+	    ></a
+	  ></span
+	></span
+      ><span
+      > </span
+      ><span id="local-6989586621679043588"
+      ><span class="annot"
+	><span class="annottext"
+	  >x :: Int
+</span
+	  ><a href="#"
+	  ><span class="hs-identifier hs-var"
+	    >x</span
+	    ></a
+	  ></span
+	></span
+      ><span
+      > </span
+      ><span id="local-6989586621679043587"
+      ><span class="annot"
+	><span class="annottext"
+	  >y :: Int
+</span
+	  ><a href="#"
+	  ><span class="hs-identifier hs-var"
+	    >y</span
+	    ></a
+	  ></span
+	></span
       ><span
       > </span
       ><span class="hs-glyph"
       >=</span
       ><span
       > </span
-      ><a href="#"
-      ><span class="hs-identifier hs-var"
-	>y</span
-	></a
-      ><span
-      > </span
-      ><span class="hs-operator hs-var"
-      >+</span
-      ><span
-      > </span
-      ><a href="#"
-      ><span class="hs-identifier hs-var"
-	>x</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>Int
+</span
+	><a href="#"
+	><span class="hs-identifier hs-var"
+	  >y</span
+	  ></a
+	></span
       ><span
       > </span
-      ><span class="hs-glyph"
-      >-</span
+      ><span class="annot"
+      ><span class="annottext"
+	>Int -&gt; Int -&gt; Int
+forall a. Num a =&gt; a -&gt; a -&gt; a
+</span
+	><span class="hs-operator hs-var"
+	>+</span
+	></span
       ><span
       > </span
-      ><a href="Identifiers.html#baz"
-      ><span class="hs-identifier hs-var"
-	>baz</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>Int
+</span
+	><a href="#"
+	><span class="hs-identifier hs-var"
+	  >x</span
+	  ></a
+	></span
       ><span
       > </span
-      ><a href="#"
-      ><span class="hs-identifier hs-var"
-	>x</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>Int -&gt; Int -&gt; Int
+forall a. Num a =&gt; a -&gt; a -&gt; a
+</span
+	><span class="hs-glyph hs-var"
+	>-</span
+	></span
       ><span
       > </span
-      ><a href="#"
-      ><span class="hs-identifier hs-var"
-	>y</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>Int -&gt; Int -&gt; Int
+</span
+	><a href="Identifiers.html#baz"
+	><span class="hs-identifier hs-var"
+	  >baz</span
+	  ></a
+	></span
       ><span
       > </span
-      ><span class="hs-glyph"
-      >-</span
+      ><span class="annot"
+      ><span class="annottext"
+	>Int
+</span
+	><a href="#"
+	><span class="hs-identifier hs-var"
+	  >x</span
+	  ></a
+	></span
       ><span
       > </span
-      ><a href="#"
-      ><span class="hs-identifier hs-var"
-	>x</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>Int
+</span
+	><a href="#"
+	><span class="hs-identifier hs-var"
+	  >y</span
+	  ></a
+	></span
       ><span
       > </span
-      ><span class="hs-operator hs-var"
-      >+</span
+      ><span class="annot"
+      ><span class="annottext"
+	>Int -&gt; Int -&gt; Int
+forall a. Num a =&gt; a -&gt; a -&gt; a
+</span
+	><span class="hs-glyph hs-var"
+	>-</span
+	></span
       ><span
       > </span
-      ><a href="#"
-      ><span class="hs-identifier hs-var"
-	>y</span
-	></a
-      ><span
-      >
+      ><span class="annot"
+      ><span class="annottext"
+	>Int
 </span
-      ><a name="line-7"
-      ></a
-      ><a name="baz"
-      ><a href="Identifiers.html#baz"
-	><span class="hs-identifier"
-	  >baz</span
+	><a href="#"
+	><span class="hs-identifier hs-var"
+	  >x</span
 	  ></a
-	></a
+	></span
       ><span
       > </span
-      ><a name=""
-      ><a href="#"
-	><span class="hs-identifier"
-	  >x</span
-	  ></a
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>Int -&gt; Int -&gt; Int
+forall a. Num a =&gt; 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"
+	>Int
+</span
+	><a href="#"
+	><span class="hs-identifier hs-var"
 	  >y</span
 	  ></a
-	></a
+	></span
+      ><span
+      >
+</span
+      ><span id="line-7"
+      ></span
+      ><span id="baz"
+      ><span class="annot"
+	><span class="annottext"
+	  >baz :: Int -&gt; Int -&gt; Int
+</span
+	  ><a href="Identifiers.html#baz"
+	  ><span class="hs-identifier hs-var hs-var"
+	    >baz</span
+	    ></a
+	  ></span
+	></span
+      ><span
+      > </span
+      ><span id="local-6989586621679043586"
+      ><span class="annot"
+	><span class="annottext"
+	  >x :: Int
+</span
+	  ><a href="#"
+	  ><span class="hs-identifier hs-var"
+	    >x</span
+	    ></a
+	  ></span
+	></span
+      ><span
+      > </span
+      ><span id="local-6989586621679043585"
+      ><span class="annot"
+	><span class="annottext"
+	  >y :: Int
+</span
+	  ><a href="#"
+	  ><span class="hs-identifier hs-var"
+	    >y</span
+	    ></a
+	  ></span
+	></span
       ><span
       > </span
       ><span class="hs-glyph"
       >=</span
       ><span
       > </span
-      ><a href="#"
-      ><span class="hs-identifier hs-var"
-	>x</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>Int
+</span
+	><a href="#"
+	><span class="hs-identifier hs-var"
+	  >x</span
+	  ></a
+	></span
       ><span
       > </span
-      ><span class="hs-operator hs-var"
-      >*</span
+      ><span class="annot"
+      ><span class="annottext"
+	>Int -&gt; Int -&gt; Int
+forall a. Num a =&gt; a -&gt; a -&gt; a
+</span
+	><span class="hs-operator hs-var"
+	>*</span
+	></span
       ><span
       > </span
-      ><a href="#"
-      ><span class="hs-identifier hs-var"
-	>y</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>Int
+</span
+	><a href="#"
+	><span class="hs-identifier hs-var"
+	  >y</span
+	  ></a
+	></span
       ><span
       > </span
-      ><span class="hs-operator hs-var"
-      >*</span
+      ><span class="annot"
+      ><span class="annottext"
+	>Int -&gt; Int -&gt; Int
+forall a. Num a =&gt; a -&gt; a -&gt; a
+</span
+	><span class="hs-operator hs-var"
+	>*</span
+	></span
       ><span
       > </span
-      ><a href="#"
-      ><span class="hs-identifier hs-var"
-	>y</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>Int
+</span
+	><a href="#"
+	><span class="hs-identifier hs-var"
+	  >y</span
+	  ></a
+	></span
       ><span
       > </span
-      ><span class="hs-operator hs-var"
-      >*</span
+      ><span class="annot"
+      ><span class="annottext"
+	>Int -&gt; Int -&gt; Int
+forall a. Num a =&gt; a -&gt; a -&gt; a
+</span
+	><span class="hs-operator hs-var"
+	>*</span
+	></span
       ><span
       > </span
-      ><a href="#"
-      ><span class="hs-identifier hs-var"
-	>y</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>Int
+</span
+	><a href="#"
+	><span class="hs-identifier hs-var"
+	  >y</span
+	  ></a
+	></span
       ><span
       > </span
-      ><span class="hs-operator hs-var"
-      >*</span
+      ><span class="annot"
+      ><span class="annottext"
+	>Int -&gt; Int -&gt; Int
+forall a. Num a =&gt; a -&gt; a -&gt; a
+</span
+	><span class="hs-operator hs-var"
+	>*</span
+	></span
       ><span
       > </span
-      ><a href="#"
-      ><span class="hs-identifier hs-var"
-	>x</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>Int
+</span
+	><a href="#"
+	><span class="hs-identifier hs-var"
+	  >x</span
+	  ></a
+	></span
       ><span
       >
 </span
-      ><a name="line-8"
-      ></a
+      ><span id="line-8"
+      ></span
       ><span
       >
 </span
-      ><a name="line-9"
-      ></a
-      ><span class="hs-identifier"
-      >quux</span
+      ><span id="line-9"
+      ></span
+      ><span class="annot"
+      ><a href="Identifiers.html#quux"
+	><span class="hs-identifier hs-type"
+	  >quux</span
+	  ></a
+	></span
       ><span
       > </span
       ><span class="hs-glyph"
       >::</span
       ><span
       > </span
+      ><span class="annot"
       ><span class="hs-identifier hs-type"
-      >Int</span
+	>Int</span
+	></span
       ><span
       > </span
       ><span class="hs-glyph"
       >-&gt;</span
       ><span
       > </span
+      ><span class="annot"
       ><span class="hs-identifier hs-type"
-      >Int</span
+	>Int</span
+	></span
       ><span
       >
 </span
-      ><a name="line-10"
-      ></a
-      ><a name="quux"
-      ><a href="Identifiers.html#quux"
-	><span class="hs-identifier"
-	  >quux</span
-	  ></a
-	></a
-      ><span
-      > </span
-      ><a name=""
-      ><a href="#"
-	><span class="hs-identifier"
-	  >x</span
-	  ></a
-	></a
+      ><span id="line-10"
+      ></span
+      ><span id="quux"
+      ><span class="annot"
+	><span class="annottext"
+	  >quux :: Int -&gt; Int
+</span
+	  ><a href="Identifiers.html#quux"
+	  ><span class="hs-identifier hs-var hs-var"
+	    >quux</span
+	    ></a
+	  ></span
+	></span
+      ><span
+      > </span
+      ><span id="local-6989586621679043583"
+      ><span class="annot"
+	><span class="annottext"
+	  >x :: Int
+</span
+	  ><a href="#"
+	  ><span class="hs-identifier hs-var"
+	    >x</span
+	    ></a
+	  ></span
+	></span
       ><span
       > </span
       ><span class="hs-glyph"
       >=</span
       ><span
       > </span
-      ><a href="Identifiers.html#foo"
-      ><span class="hs-identifier hs-var"
-	>foo</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>Int -&gt; Int -&gt; Int
+</span
+	><a href="Identifiers.html#foo"
+	><span class="hs-identifier hs-var"
+	  >foo</span
+	  ></a
+	></span
       ><span
       > </span
       ><span class="hs-special"
       >(</span
-      ><a href="Identifiers.html#bar"
-      ><span class="hs-identifier hs-var"
-	>bar</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>Int -&gt; Int -&gt; Int
+</span
+	><a href="Identifiers.html#bar"
+	><span class="hs-identifier hs-var"
+	  >bar</span
+	  ></a
+	></span
       ><span
       > </span
-      ><a href="#"
-      ><span class="hs-identifier hs-var"
-	>x</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>Int
+</span
+	><a href="#"
+	><span class="hs-identifier hs-var"
+	  >x</span
+	  ></a
+	></span
       ><span
       > </span
-      ><a href="#"
-      ><span class="hs-identifier hs-var"
-	>x</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>Int
+</span
+	><a href="#"
+	><span class="hs-identifier hs-var"
+	  >x</span
+	  ></a
+	></span
       ><span class="hs-special"
       >)</span
       ><span
       > </span
       ><span class="hs-special"
       >(</span
-      ><a href="Identifiers.html#bar"
-      ><span class="hs-identifier hs-var"
-	>bar</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>Int -&gt; Int -&gt; Int
+</span
+	><a href="Identifiers.html#bar"
+	><span class="hs-identifier hs-var"
+	  >bar</span
+	  ></a
+	></span
       ><span
       > </span
-      ><a href="#"
-      ><span class="hs-identifier hs-var"
-	>x</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>Int
+</span
+	><a href="#"
+	><span class="hs-identifier hs-var"
+	  >x</span
+	  ></a
+	></span
       ><span
       > </span
-      ><a href="#"
-      ><span class="hs-identifier hs-var"
-	>x</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>Int
+</span
+	><a href="#"
+	><span class="hs-identifier hs-var"
+	  >x</span
+	  ></a
+	></span
       ><span class="hs-special"
       >)</span
       ><span
       >
 </span
-      ><a name="line-11"
-      ></a
+      ><span id="line-11"
+      ></span
       ><span
       >
 </span
-      ><a name="line-12"
-      ></a
-      ><span class="hs-identifier"
-      >norf</span
+      ><span id="line-12"
+      ></span
+      ><span class="annot"
+      ><a href="Identifiers.html#norf"
+	><span class="hs-identifier hs-type"
+	  >norf</span
+	  ></a
+	></span
       ><span
       > </span
       ><span class="hs-glyph"
       >::</span
       ><span
       > </span
+      ><span class="annot"
       ><span class="hs-identifier hs-type"
-      >Int</span
+	>Int</span
+	></span
       ><span
       > </span
       ><span class="hs-glyph"
       >-&gt;</span
       ><span
       > </span
+      ><span class="annot"
       ><span class="hs-identifier hs-type"
-      >Int</span
+	>Int</span
+	></span
       ><span
       > </span
       ><span class="hs-glyph"
       >-&gt;</span
       ><span
       > </span
+      ><span class="annot"
       ><span class="hs-identifier hs-type"
-      >Int</span
+	>Int</span
+	></span
       ><span
       > </span
       ><span class="hs-glyph"
       >-&gt;</span
       ><span
       > </span
+      ><span class="annot"
       ><span class="hs-identifier hs-type"
-      >Int</span
+	>Int</span
+	></span
       ><span
       >
 </span
-      ><a name="line-13"
-      ></a
-      ><a name="norf"
-      ><a href="Identifiers.html#norf"
-	><span class="hs-identifier"
-	  >norf</span
-	  ></a
-	></a
-      ><span
-      > </span
-      ><a name=""
-      ><a href="#"
-	><span class="hs-identifier"
-	  >x</span
-	  ></a
-	></a
-      ><span
-      > </span
-      ><a name=""
-      ><a href="#"
-	><span class="hs-identifier"
-	  >y</span
-	  ></a
-	></a
-      ><span
-      > </span
-      ><a name=""
-      ><a href="#"
-	><span class="hs-identifier"
-	  >z</span
-	  ></a
-	></a
+      ><span id="line-13"
+      ></span
+      ><span id="norf"
+      ><span class="annot"
+	><span class="annottext"
+	  >norf :: Int -&gt; Int -&gt; Int -&gt; Int
+</span
+	  ><a href="Identifiers.html#norf"
+	  ><span class="hs-identifier hs-var hs-var"
+	    >norf</span
+	    ></a
+	  ></span
+	></span
+      ><span
+      > </span
+      ><span id="local-6989586621679043581"
+      ><span class="annot"
+	><span class="annottext"
+	  >x :: Int
+</span
+	  ><a href="#"
+	  ><span class="hs-identifier hs-var"
+	    >x</span
+	    ></a
+	  ></span
+	></span
+      ><span
+      > </span
+      ><span id="local-6989586621679043580"
+      ><span class="annot"
+	><span class="annottext"
+	  >y :: Int
+</span
+	  ><a href="#"
+	  ><span class="hs-identifier hs-var"
+	    >y</span
+	    ></a
+	  ></span
+	></span
+      ><span
+      > </span
+      ><span id="local-6989586621679043579"
+      ><span class="annot"
+	><span class="annottext"
+	  >z :: Int
+</span
+	  ><a href="#"
+	  ><span class="hs-identifier hs-var"
+	    >z</span
+	    ></a
+	  ></span
+	></span
       ><span
       >
 </span
-      ><a name="line-14"
-      ></a
+      ><span id="line-14"
+      ></span
       ><span
       >    </span
       ><span class="hs-glyph"
       >|</span
       ><span
       > </span
-      ><a href="#"
-      ><span class="hs-identifier hs-var"
-	>x</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>Int
+</span
+	><a href="#"
+	><span class="hs-identifier hs-var"
+	  >x</span
+	  ></a
+	></span
       ><span
       > </span
-      ><span class="hs-operator hs-var"
-      >&lt;</span
+      ><span class="annot"
+      ><span class="annottext"
+	>Int -&gt; Int -&gt; Bool
+forall a. Ord a =&gt; a -&gt; a -&gt; Bool
+</span
+	><span class="hs-operator hs-var"
+	>&lt;</span
+	></span
       ><span
       > </span
+      ><span class="annot"
       ><span class="hs-number"
-      >0</span
+	>0</span
+	></span
       ><span
       > </span
       ><span class="hs-glyph"
       >=</span
       ><span
       > </span
-      ><a href="Identifiers.html#quux"
-      ><span class="hs-identifier hs-var"
-	>quux</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>Int -&gt; Int
+</span
+	><a href="Identifiers.html#quux"
+	><span class="hs-identifier hs-var"
+	  >quux</span
+	  ></a
+	></span
       ><span
       > </span
-      ><a href="#"
-      ><span class="hs-identifier hs-var"
-	>x</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>Int
+</span
+	><a href="#"
+	><span class="hs-identifier hs-var"
+	  >x</span
+	  ></a
+	></span
       ><span
       >
 </span
-      ><a name="line-15"
-      ></a
+      ><span id="line-15"
+      ></span
       ><span
       >    </span
       ><span class="hs-glyph"
       >|</span
       ><span
       > </span
-      ><a href="#"
-      ><span class="hs-identifier hs-var"
-	>y</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>Int
+</span
+	><a href="#"
+	><span class="hs-identifier hs-var"
+	  >y</span
+	  ></a
+	></span
       ><span
       > </span
-      ><span class="hs-operator hs-var"
-      >&lt;</span
+      ><span class="annot"
+      ><span class="annottext"
+	>Int -&gt; Int -&gt; Bool
+forall a. Ord a =&gt; a -&gt; a -&gt; Bool
+</span
+	><span class="hs-operator hs-var"
+	>&lt;</span
+	></span
       ><span
       > </span
+      ><span class="annot"
       ><span class="hs-number"
-      >0</span
+	>0</span
+	></span
       ><span
       > </span
       ><span class="hs-glyph"
       >=</span
       ><span
       > </span
-      ><a href="Identifiers.html#quux"
-      ><span class="hs-identifier hs-var"
-	>quux</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>Int -&gt; Int
+</span
+	><a href="Identifiers.html#quux"
+	><span class="hs-identifier hs-var"
+	  >quux</span
+	  ></a
+	></span
       ><span
       > </span
-      ><a href="#"
-      ><span class="hs-identifier hs-var"
-	>y</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>Int
+</span
+	><a href="#"
+	><span class="hs-identifier hs-var"
+	  >y</span
+	  ></a
+	></span
       ><span
       >
 </span
-      ><a name="line-16"
-      ></a
+      ><span id="line-16"
+      ></span
       ><span
       >    </span
       ><span class="hs-glyph"
       >|</span
       ><span
       > </span
-      ><a href="#"
-      ><span class="hs-identifier hs-var"
-	>z</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>Int
+</span
+	><a href="#"
+	><span class="hs-identifier hs-var"
+	  >z</span
+	  ></a
+	></span
       ><span
       > </span
-      ><span class="hs-operator hs-var"
-      >&lt;</span
+      ><span class="annot"
+      ><span class="annottext"
+	>Int -&gt; Int -&gt; Bool
+forall a. Ord a =&gt; a -&gt; a -&gt; Bool
+</span
+	><span class="hs-operator hs-var"
+	>&lt;</span
+	></span
       ><span
       > </span
+      ><span class="annot"
       ><span class="hs-number"
-      >0</span
+	>0</span
+	></span
       ><span
       > </span
       ><span class="hs-glyph"
       >=</span
       ><span
       > </span
-      ><a href="Identifiers.html#quux"
-      ><span class="hs-identifier hs-var"
-	>quux</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>Int -&gt; Int
+</span
+	><a href="Identifiers.html#quux"
+	><span class="hs-identifier hs-var"
+	  >quux</span
+	  ></a
+	></span
       ><span
       > </span
-      ><a href="#"
-      ><span class="hs-identifier hs-var"
-	>z</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>Int
+</span
+	><a href="#"
+	><span class="hs-identifier hs-var"
+	  >z</span
+	  ></a
+	></span
       ><span
       >
 </span
-      ><a name="line-17"
-      ></a
+      ><span id="line-17"
+      ></span
       ><span
       >    </span
       ><span class="hs-glyph"
       >|</span
       ><span
       > </span
-      ><span class="hs-identifier hs-var"
-      >otherwise</span
+      ><span class="annot"
+      ><span class="annottext"
+	>Bool
+</span
+	><span class="hs-identifier hs-var"
+	>otherwise</span
+	></span
       ><span
       > </span
       ><span class="hs-glyph"
       >=</span
       ><span
       > </span
-      ><a href="Identifiers.html#norf"
-      ><span class="hs-identifier hs-var"
-	>norf</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>Int -&gt; Int -&gt; Int -&gt; Int
+</span
+	><a href="Identifiers.html#norf"
+	><span class="hs-identifier hs-var"
+	  >norf</span
+	  ></a
+	></span
       ><span
       > </span
       ><span class="hs-special"
       >(</span
       ><span class="hs-glyph"
       >-</span
-      ><a href="#"
-      ><span class="hs-identifier hs-var"
-	>x</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>Int
+</span
+	><a href="#"
+	><span class="hs-identifier hs-var"
+	  >x</span
+	  ></a
+	></span
       ><span class="hs-special"
       >)</span
       ><span
@@ -662,10 +1061,15 @@
       >(</span
       ><span class="hs-glyph"
       >-</span
-      ><a href="#"
-      ><span class="hs-identifier hs-var"
-	>y</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>Int
+</span
+	><a href="#"
+	><span class="hs-identifier hs-var"
+	  >y</span
+	  ></a
+	></span
       ><span class="hs-special"
       >)</span
       ><span
@@ -674,37 +1078,48 @@
       >(</span
       ><span class="hs-glyph"
       >-</span
-      ><a href="#"
-      ><span class="hs-identifier hs-var"
-	>z</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>Int
+</span
+	><a href="#"
+	><span class="hs-identifier hs-var"
+	  >z</span
+	  ></a
+	></span
       ><span class="hs-special"
       >)</span
       ><span
       >
 </span
-      ><a name="line-18"
-      ></a
+      ><span id="line-18"
+      ></span
       ><span
       >
 </span
-      ><a name="line-19"
-      ></a
+      ><span id="line-19"
+      ></span
       ><span
       >
 </span
-      ><a name="line-20"
-      ></a
-      ><span class="hs-identifier"
-      >main</span
+      ><span id="line-20"
+      ></span
+      ><span class="annot"
+      ><a href="Identifiers.html#main"
+	><span class="hs-identifier hs-type"
+	  >main</span
+	  ></a
+	></span
       ><span
       > </span
       ><span class="hs-glyph"
       >::</span
       ><span
       > </span
+      ><span class="annot"
       ><span class="hs-identifier hs-type"
-      >IO</span
+	>IO</span
+	></span
       ><span
       > </span
       ><span class="hs-special"
@@ -714,14 +1129,19 @@
       ><span
       >
 </span
-      ><a name="line-21"
-      ></a
-      ><a name="main"
-      ><a href="Identifiers.html#main"
-	><span class="hs-identifier"
-	  >main</span
-	  ></a
-	></a
+      ><span id="line-21"
+      ></span
+      ><span id="main"
+      ><span class="annot"
+	><span class="annottext"
+	  >main :: IO ()
+</span
+	  ><a href="Identifiers.html#main"
+	  ><span class="hs-identifier hs-var hs-var"
+	    >main</span
+	    ></a
+	  ></span
+	></span
       ><span
       > </span
       ><span class="hs-glyph"
@@ -733,125 +1153,239 @@
       ><span
       >
 </span
-      ><a name="line-22"
-      ></a
+      ><span id="line-22"
+      ></span
       ><span
       >    </span
-      ><span class="hs-identifier hs-var"
-      >putStrLn</span
+      ><span class="annot"
+      ><span class="annottext"
+	>String -&gt; IO ()
+</span
+	><span class="hs-identifier hs-var"
+	>putStrLn</span
+	></span
       ><span
       > </span
-      ><span class="hs-operator hs-var"
-      >.</span
+      ><span class="annot"
+      ><span class="annottext"
+	>(String -&gt; IO ()) -&gt; (Int -&gt; String) -&gt; Int -&gt; IO ()
+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="hs-identifier hs-var"
-      >show</span
+      ><span class="annot"
+      ><span class="annottext"
+	>Int -&gt; String
+forall a. Show a =&gt; a -&gt; String
+</span
+	><span class="hs-identifier hs-var"
+	>show</span
+	></span
       ><span
       > </span
-      ><span class="hs-operator hs-var"
-      >$</span
+      ><span class="annot"
+      ><span class="annottext"
+	>(Int -&gt; IO ()) -&gt; Int -&gt; IO ()
+forall a b. (a -&gt; b) -&gt; a -&gt; b
+</span
+	><span class="hs-operator hs-var"
+	>$</span
+	></span
       ><span
       > </span
-      ><a href="Identifiers.html#foo"
-      ><span class="hs-identifier hs-var"
-	>foo</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>Int -&gt; Int -&gt; Int
+</span
+	><a href="Identifiers.html#foo"
+	><span class="hs-identifier hs-var"
+	  >foo</span
+	  ></a
+	></span
       ><span
       > </span
-      ><a href="#"
-      ><span class="hs-identifier hs-var"
-	>x</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>Int
+</span
+	><a href="#"
+	><span class="hs-identifier hs-var"
+	  >x</span
+	  ></a
+	></span
       ><span
       > </span
-      ><a href="#"
-      ><span class="hs-identifier hs-var"
-	>y</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>Int
+</span
+	><a href="#"
+	><span class="hs-identifier hs-var"
+	  >y</span
+	  ></a
+	></span
       ><span
       >
 </span
-      ><a name="line-23"
-      ></a
+      ><span id="line-23"
+      ></span
       ><span
       >    </span
-      ><span class="hs-identifier hs-var"
-      >putStrLn</span
+      ><span class="annot"
+      ><span class="annottext"
+	>String -&gt; IO ()
+</span
+	><span class="hs-identifier hs-var"
+	>putStrLn</span
+	></span
       ><span
       > </span
-      ><span class="hs-operator hs-var"
-      >.</span
+      ><span class="annot"
+      ><span class="annottext"
+	>(String -&gt; IO ()) -&gt; (Int -&gt; String) -&gt; Int -&gt; IO ()
+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="hs-identifier hs-var"
-      >show</span
+      ><span class="annot"
+      ><span class="annottext"
+	>Int -&gt; String
+forall a. Show a =&gt; a -&gt; String
+</span
+	><span class="hs-identifier hs-var"
+	>show</span
+	></span
       ><span
       > </span
-      ><span class="hs-operator hs-var"
-      >$</span
+      ><span class="annot"
+      ><span class="annottext"
+	>(Int -&gt; IO ()) -&gt; Int -&gt; IO ()
+forall a b. (a -&gt; b) -&gt; a -&gt; b
+</span
+	><span class="hs-operator hs-var"
+	>$</span
+	></span
       ><span
       > </span
-      ><a href="Identifiers.html#quux"
-      ><span class="hs-identifier hs-var"
-	>quux</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>Int -&gt; Int
+</span
+	><a href="Identifiers.html#quux"
+	><span class="hs-identifier hs-var"
+	  >quux</span
+	  ></a
+	></span
       ><span
       > </span
-      ><a href="#"
-      ><span class="hs-identifier hs-var"
-	>z</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>Int
+</span
+	><a href="#"
+	><span class="hs-identifier hs-var"
+	  >z</span
+	  ></a
+	></span
       ><span
       >
 </span
-      ><a name="line-24"
-      ></a
+      ><span id="line-24"
+      ></span
       ><span
       >    </span
-      ><span class="hs-identifier hs-var"
-      >putStrLn</span
+      ><span class="annot"
+      ><span class="annottext"
+	>String -&gt; IO ()
+</span
+	><span class="hs-identifier hs-var"
+	>putStrLn</span
+	></span
       ><span
       > </span
-      ><span class="hs-operator hs-var"
-      >.</span
+      ><span class="annot"
+      ><span class="annottext"
+	>(String -&gt; IO ()) -&gt; (Int -&gt; String) -&gt; Int -&gt; IO ()
+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="hs-identifier hs-var"
-      >show</span
+      ><span class="annot"
+      ><span class="annottext"
+	>Int -&gt; String
+forall a. Show a =&gt; a -&gt; String
+</span
+	><span class="hs-identifier hs-var"
+	>show</span
+	></span
       ><span
       > </span
-      ><span class="hs-operator hs-var"
-      >$</span
+      ><span class="annot"
+      ><span class="annottext"
+	>(Int -&gt; IO ()) -&gt; Int -&gt; IO ()
+forall a b. (a -&gt; b) -&gt; a -&gt; b
+</span
+	><span class="hs-operator hs-var"
+	>$</span
+	></span
       ><span
       > </span
-      ><a href="Identifiers.html#norf"
-      ><span class="hs-identifier hs-var"
-	>Identifiers.norf</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>Int -&gt; Int -&gt; Int -&gt; Int
+</span
+	><a href="Identifiers.html#norf"
+	><span class="hs-identifier hs-var"
+	  >Identifiers.norf</span
+	  ></a
+	></span
       ><span
       > </span
-      ><a href="#"
-      ><span class="hs-identifier hs-var"
-	>x</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>Int
+</span
+	><a href="#"
+	><span class="hs-identifier hs-var"
+	  >x</span
+	  ></a
+	></span
       ><span
       > </span
-      ><a href="#"
-      ><span class="hs-identifier hs-var"
-	>y</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>Int
+</span
+	><a href="#"
+	><span class="hs-identifier hs-var"
+	  >y</span
+	  ></a
+	></span
       ><span
       > </span
-      ><a href="#"
-      ><span class="hs-identifier hs-var"
-	>z</span
-	></a
+      ><span class="annot"
+      ><span class="annottext"
+	>Int
+</span
+	><a href="#"
+	><span class="hs-identifier hs-var"
+	  >z</span
+	  ></a
+	></span
       ><span
       >
 </span
-      ><a name="line-25"
-      ></a
+      ><span id="line-25"
+      ></span
       ><span
       >  </span
       ><span class="hs-keyword"
@@ -859,72 +1393,93 @@
       ><span
       >
 </span
-      ><a name="line-26"
-      ></a
+      ><span id="line-26"
+      ></span
       ><span
       >    </span
-      ><a name=""
-      ><a href="#"
-	><span class="hs-identifier"
-	  >x</span
-	  ></a
-	></a
+      ><span id="local-6989586621679043573"
+      ><span class="annot"
+	><span class="annottext"
+	  >x :: Int
+</span
+	  ><a href="#"
+	  ><span class="hs-identifier hs-var hs-var"
+	    >x</span
+	    ></a
+	  ></span
+	></span
       ><span
       > </span
       ><span class="hs-glyph"
       >=</span
       ><span
       > </span
+      ><span class="annot"
       ><span class="hs-number"
-      >10</span
+	>10</span
+	></span
       ><span
       >
 </span
-      ><a name="line-27"
-      ></a
+      ><span id="line-27"
+      ></span
       ><span
       >    </span
-      ><a name=""
-      ><a href="#"
-	><span class="hs-identifier"
-	  >y</span
-	  ></a
-	></a
+      ><span id="local-6989586621679043572"
+      ><span class="annot"
+	><span class="annottext"
+	  >y :: Int
+</span
+	  ><a href="#"
+	  ><span class="hs-identifier hs-var hs-var"
+	    >y</span
+	    ></a
+	  ></span
+	></span
       ><span
       > </span
       ><span class="hs-glyph"
       >=</span
       ><span
       > </span
+      ><span class="annot"
       ><span class="hs-number"
-      >20</span
+	>20</span
+	></span
       ><span
       >
 </span
-      ><a name="line-28"
-      ></a
+      ><span id="line-28"
+      ></span
       ><span
       >    </span
-      ><a name=""
-      ><a href="#"
-	><span class="hs-identifier"
-	  >z</span
-	  ></a
-	></a
+      ><span id="local-6989586621679043571"
+      ><span class="annot"
+	><span class="annottext"
+	  >z :: Int
+</span
+	  ><a href="#"
+	  ><span class="hs-identifier hs-var hs-var"
+	    >z</span
+	    ></a
+	  ></span
+	></span
       ><span
       > </span
       ><span class="hs-glyph"
       >=</span
       ><span
       > </span
+      ><span class="annot"
       ><span class="hs-number"
-      >30</span
+	>30</span
+	></span
       ><span
       >
 </span
-      ><a name="line-29"
-      ></a
+      ><span id="line-29"
+      ></span
       ></pre
     ></body
   ></html
->
+>
\ No newline at end of file
-- 
cgit v1.2.3