2017-01-25 21:51:26 +01:00
|
|
|
<!DOCTYPE html>
|
Make default.html5 polyglot markup conformant. (#3473)
Polyglot markup is HTML5 that is also valid XHTML. See
<https://www.w3.org/TR/html-polyglot>. With this change, pandoc's
html5 writer creates HTML that is both valid HTML5 and valid XHTML.
See jgm/pandoc-templates#237 for prior discussion.
* Add xml namespace to `<html>` element.
* Make all `<meta>` elements self closing.
See <https://www.w3.org/TR/html-polyglot/#empty-elements>.
* Add `xml:lang` attribute on `<html>` element, defaulting to blank, and
always include `lang` attribute, even when blank. See
<https://www.w3.org/TR/html-polyglot/#language-attributes>.
* Update test files for template changes.
The key justification for having language values default to blank: it
turns out the HTML5 spec requires it (as I read it). Under
[the HTML5 spec, section "3.2.5.3. The lang and xml:lang
attributes"](https://www.w3.org/TR/html/dom.html#the-lang-and-xmllang-attributes),
providing attributes with blank contents both:
* Has meaning, "unknown", and
* Is a MUST (written as "must") if a language value is not provided ...
> The lang attribute (in no namespace) specifies the primary language
> for the element's contents and for any of the element's attributes that
> contain text. Its value must be a valid BCP 47 language tag, or the
> empty string. Setting the attribute to the empty string indicates that
> the primary language is unknown.
In short, it seems that where a language value is not provided then a
blank value MUST be provided for Polyglot Markup conformance, because
the HTML5 spec stipulates a "must". So although the Polyglot Markup spec
is unclear on this issue it would seem that if it was correctly written,
it would therefore require blank attributes.
Further justifications are found at
https://github.com/jgm/pandoc-templates/issues/237#issuecomment-275584181
(but the HTML5 spec justification given above would seem to be the
clincher).
In addition to having lang-values-default-to-blank I recommend that, when an
author does not provide a lang value, then upon on pandoc command execution
a warning message like the following be provided:
> Polyglot markup stipulates that 'The root element SHOULD always specify
> the language'. It is therefore recommended you specify a language value in
> your source document. See
> <https://www.w3.org/International/articles/language-tags/> for valid
> language values.
2017-03-04 10:08:38 +01:00
|
|
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
|
2009-12-31 02:18:35 +01:00
|
|
|
<head>
|
Make default.html5 polyglot markup conformant. (#3473)
Polyglot markup is HTML5 that is also valid XHTML. See
<https://www.w3.org/TR/html-polyglot>. With this change, pandoc's
html5 writer creates HTML that is both valid HTML5 and valid XHTML.
See jgm/pandoc-templates#237 for prior discussion.
* Add xml namespace to `<html>` element.
* Make all `<meta>` elements self closing.
See <https://www.w3.org/TR/html-polyglot/#empty-elements>.
* Add `xml:lang` attribute on `<html>` element, defaulting to blank, and
always include `lang` attribute, even when blank. See
<https://www.w3.org/TR/html-polyglot/#language-attributes>.
* Update test files for template changes.
The key justification for having language values default to blank: it
turns out the HTML5 spec requires it (as I read it). Under
[the HTML5 spec, section "3.2.5.3. The lang and xml:lang
attributes"](https://www.w3.org/TR/html/dom.html#the-lang-and-xmllang-attributes),
providing attributes with blank contents both:
* Has meaning, "unknown", and
* Is a MUST (written as "must") if a language value is not provided ...
> The lang attribute (in no namespace) specifies the primary language
> for the element's contents and for any of the element's attributes that
> contain text. Its value must be a valid BCP 47 language tag, or the
> empty string. Setting the attribute to the empty string indicates that
> the primary language is unknown.
In short, it seems that where a language value is not provided then a
blank value MUST be provided for Polyglot Markup conformance, because
the HTML5 spec stipulates a "must". So although the Polyglot Markup spec
is unclear on this issue it would seem that if it was correctly written,
it would therefore require blank attributes.
Further justifications are found at
https://github.com/jgm/pandoc-templates/issues/237#issuecomment-275584181
(but the HTML5 spec justification given above would seem to be the
clincher).
In addition to having lang-values-default-to-blank I recommend that, when an
author does not provide a lang value, then upon on pandoc command execution
a warning message like the following be provided:
> Polyglot markup stipulates that 'The root element SHOULD always specify
> the language'. It is therefore recommended you specify a language value in
> your source document. See
> <https://www.w3.org/International/articles/language-tags/> for valid
> language values.
2017-03-04 10:08:38 +01:00
|
|
|
<meta charset="utf-8" />
|
|
|
|
<meta name="generator" content="pandoc" />
|
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
|
2017-03-09 09:41:22 +01:00
|
|
|
<title>lhs-test</title>
|
2018-12-14 20:29:35 +01:00
|
|
|
<style>
|
2020-09-20 01:13:50 +02:00
|
|
|
html {
|
2020-11-02 19:19:53 +01:00
|
|
|
line-height: 1.5;
|
2020-09-20 01:13:50 +02:00
|
|
|
font-family: Georgia, serif;
|
2020-11-02 19:19:53 +01:00
|
|
|
font-size: 20px;
|
2020-09-20 01:13:50 +02:00
|
|
|
color: #1a1a1a;
|
|
|
|
background-color: #fdfdfd;
|
|
|
|
}
|
|
|
|
body {
|
|
|
|
margin: 0 auto;
|
2020-11-02 19:19:53 +01:00
|
|
|
max-width: 36em;
|
2020-09-20 01:13:50 +02:00
|
|
|
padding-left: 50px;
|
|
|
|
padding-right: 50px;
|
|
|
|
padding-top: 50px;
|
|
|
|
padding-bottom: 50px;
|
|
|
|
hyphens: auto;
|
2021-07-02 09:27:15 +02:00
|
|
|
overflow-wrap: break-word;
|
2020-09-20 01:13:50 +02:00
|
|
|
text-rendering: optimizeLegibility;
|
|
|
|
font-kerning: normal;
|
|
|
|
}
|
|
|
|
@media (max-width: 600px) {
|
|
|
|
body {
|
|
|
|
font-size: 0.9em;
|
|
|
|
padding: 1em;
|
|
|
|
}
|
2022-01-16 18:22:43 +01:00
|
|
|
h1 {
|
|
|
|
font-size: 1.8em;
|
|
|
|
}
|
2020-09-20 01:13:50 +02:00
|
|
|
}
|
|
|
|
@media print {
|
|
|
|
body {
|
|
|
|
background-color: transparent;
|
|
|
|
color: black;
|
2020-11-02 19:19:53 +01:00
|
|
|
font-size: 12pt;
|
2020-09-20 01:13:50 +02:00
|
|
|
}
|
|
|
|
p, h2, h3 {
|
|
|
|
orphans: 3;
|
|
|
|
widows: 3;
|
|
|
|
}
|
|
|
|
h2, h3, h4 {
|
|
|
|
page-break-after: avoid;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
p {
|
2020-11-02 19:19:53 +01:00
|
|
|
margin: 1em 0;
|
2020-09-20 01:13:50 +02:00
|
|
|
}
|
|
|
|
a {
|
|
|
|
color: #1a1a1a;
|
|
|
|
}
|
|
|
|
a:visited {
|
|
|
|
color: #1a1a1a;
|
|
|
|
}
|
|
|
|
img {
|
|
|
|
max-width: 100%;
|
|
|
|
}
|
|
|
|
h1, h2, h3, h4, h5, h6 {
|
2020-11-02 19:19:53 +01:00
|
|
|
margin-top: 1.4em;
|
2020-09-20 01:13:50 +02:00
|
|
|
}
|
2020-11-01 23:22:58 +01:00
|
|
|
h5, h6 {
|
2020-11-02 19:19:53 +01:00
|
|
|
font-size: 1em;
|
2020-11-01 23:22:58 +01:00
|
|
|
font-style: italic;
|
|
|
|
}
|
|
|
|
h6 {
|
|
|
|
font-weight: normal;
|
|
|
|
}
|
2020-09-20 01:13:50 +02:00
|
|
|
ol, ul {
|
|
|
|
padding-left: 1.7em;
|
2020-11-02 19:19:53 +01:00
|
|
|
margin-top: 1em;
|
2020-09-20 01:13:50 +02:00
|
|
|
}
|
|
|
|
li > ol, li > ul {
|
|
|
|
margin-top: 0;
|
|
|
|
}
|
|
|
|
blockquote {
|
2020-11-02 19:19:53 +01:00
|
|
|
margin: 1em 0 1em 1.7em;
|
2020-09-20 01:13:50 +02:00
|
|
|
padding-left: 1em;
|
|
|
|
border-left: 2px solid #e6e6e6;
|
2020-11-01 23:22:58 +01:00
|
|
|
color: #606060;
|
2020-09-20 01:13:50 +02:00
|
|
|
}
|
|
|
|
code {
|
|
|
|
font-family: Menlo, Monaco, 'Lucida Console', Consolas, monospace;
|
|
|
|
font-size: 85%;
|
|
|
|
margin: 0;
|
|
|
|
}
|
|
|
|
pre {
|
2020-11-02 19:19:53 +01:00
|
|
|
margin: 1em 0;
|
2020-09-20 01:13:50 +02:00
|
|
|
overflow: auto;
|
|
|
|
}
|
|
|
|
pre code {
|
|
|
|
padding: 0;
|
|
|
|
overflow: visible;
|
2021-07-02 09:27:15 +02:00
|
|
|
overflow-wrap: normal;
|
2020-09-20 01:13:50 +02:00
|
|
|
}
|
2020-11-01 23:22:58 +01:00
|
|
|
.sourceCode {
|
|
|
|
background-color: transparent;
|
|
|
|
overflow: visible;
|
|
|
|
}
|
2020-09-20 01:13:50 +02:00
|
|
|
hr {
|
|
|
|
background-color: #1a1a1a;
|
|
|
|
border: none;
|
|
|
|
height: 1px;
|
2020-11-02 19:19:53 +01:00
|
|
|
margin: 1em 0;
|
2020-09-20 01:13:50 +02:00
|
|
|
}
|
|
|
|
table {
|
2020-11-02 19:19:53 +01:00
|
|
|
margin: 1em 0;
|
2020-09-20 01:13:50 +02:00
|
|
|
border-collapse: collapse;
|
|
|
|
width: 100%;
|
|
|
|
overflow-x: auto;
|
|
|
|
display: block;
|
2020-11-01 23:22:58 +01:00
|
|
|
font-variant-numeric: lining-nums tabular-nums;
|
|
|
|
}
|
|
|
|
table caption {
|
|
|
|
margin-bottom: 0.75em;
|
|
|
|
}
|
|
|
|
tbody {
|
2020-11-02 19:19:53 +01:00
|
|
|
margin-top: 0.5em;
|
2020-11-01 23:22:58 +01:00
|
|
|
border-top: 1px solid #1a1a1a;
|
|
|
|
border-bottom: 1px solid #1a1a1a;
|
2020-09-20 01:13:50 +02:00
|
|
|
}
|
2020-11-01 23:22:58 +01:00
|
|
|
th {
|
|
|
|
border-top: 1px solid #1a1a1a;
|
|
|
|
padding: 0.25em 0.5em 0.25em 0.5em;
|
|
|
|
}
|
|
|
|
td {
|
|
|
|
padding: 0.125em 0.5em 0.25em 0.5em;
|
2020-09-20 01:13:50 +02:00
|
|
|
}
|
|
|
|
header {
|
2020-11-02 19:19:53 +01:00
|
|
|
margin-bottom: 4em;
|
2020-09-20 01:13:50 +02:00
|
|
|
text-align: center;
|
|
|
|
}
|
2020-11-01 23:22:58 +01:00
|
|
|
#TOC li {
|
|
|
|
list-style: none;
|
|
|
|
}
|
2022-01-16 18:22:43 +01:00
|
|
|
#TOC ul {
|
|
|
|
padding-left: 1.3em;
|
|
|
|
}
|
|
|
|
#TOC > ul {
|
|
|
|
padding-left: 0;
|
|
|
|
}
|
2020-11-01 23:22:58 +01:00
|
|
|
#TOC a:not(:hover) {
|
2020-09-20 01:13:50 +02:00
|
|
|
text-decoration: none;
|
|
|
|
}
|
2019-09-05 02:33:59 +02:00
|
|
|
code{white-space: pre-wrap;}
|
|
|
|
span.smallcaps{font-variant: small-caps;}
|
2022-07-29 23:44:13 +02:00
|
|
|
div.columns{display: flex; gap: min(4vw, 1.5em);}
|
2022-08-21 11:30:21 +02:00
|
|
|
div.column{flex: auto; overflow-x: auto;}
|
2019-09-05 21:42:23 +02:00
|
|
|
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
|
2019-12-05 18:36:34 +01:00
|
|
|
ul.task-list{list-style: none;}
|
2022-08-03 18:49:42 +02:00
|
|
|
ul.task-list li input[type="checkbox"] {
|
|
|
|
width: 0.8em;
|
|
|
|
margin: 0 0.8em 0.2em -1.6em;
|
|
|
|
vertical-align: middle;
|
|
|
|
}
|
2019-09-05 02:33:59 +02:00
|
|
|
pre > code.sourceCode { white-space: pre; position: relative; }
|
|
|
|
pre > code.sourceCode > span { display: inline-block; line-height: 1.25; }
|
|
|
|
pre > code.sourceCode > span:empty { height: 1.2em; }
|
2020-12-17 20:10:00 +01:00
|
|
|
.sourceCode { overflow: visible; }
|
2019-09-05 02:33:59 +02:00
|
|
|
code.sourceCode > span { color: inherit; text-decoration: inherit; }
|
|
|
|
div.sourceCode { margin: 1em 0; }
|
|
|
|
pre.sourceCode { margin: 0; }
|
|
|
|
@media screen {
|
|
|
|
div.sourceCode { overflow: auto; }
|
|
|
|
}
|
|
|
|
@media print {
|
|
|
|
pre > code.sourceCode { white-space: pre-wrap; }
|
|
|
|
pre > code.sourceCode > span { text-indent: -5em; padding-left: 5em; }
|
|
|
|
}
|
|
|
|
pre.numberSource code
|
|
|
|
{ counter-reset: source-line 0; }
|
|
|
|
pre.numberSource code > span
|
|
|
|
{ position: relative; left: -4em; counter-increment: source-line; }
|
|
|
|
pre.numberSource code > span > a:first-child::before
|
|
|
|
{ content: counter(source-line);
|
|
|
|
position: relative; left: -1em; text-align: right; vertical-align: baseline;
|
|
|
|
border: none; display: inline-block;
|
|
|
|
-webkit-touch-callout: none; -webkit-user-select: none;
|
|
|
|
-khtml-user-select: none; -moz-user-select: none;
|
|
|
|
-ms-user-select: none; user-select: none;
|
|
|
|
padding: 0 4px; width: 4em;
|
|
|
|
color: #aaaaaa;
|
|
|
|
}
|
|
|
|
pre.numberSource { margin-left: 3em; border-left: 1px solid #aaaaaa; padding-left: 4px; }
|
|
|
|
div.sourceCode
|
|
|
|
{ }
|
|
|
|
@media screen {
|
|
|
|
pre > code.sourceCode > span > a:first-child::before { text-decoration: underline; }
|
|
|
|
}
|
|
|
|
code span.al { color: #ff0000; font-weight: bold; } /* Alert */
|
|
|
|
code span.an { color: #60a0b0; font-weight: bold; font-style: italic; } /* Annotation */
|
|
|
|
code span.at { color: #7d9029; } /* Attribute */
|
|
|
|
code span.bn { color: #40a070; } /* BaseN */
|
2022-06-01 04:49:27 +02:00
|
|
|
code span.bu { color: #008000; } /* BuiltIn */
|
2019-09-05 02:33:59 +02:00
|
|
|
code span.cf { color: #007020; font-weight: bold; } /* ControlFlow */
|
|
|
|
code span.ch { color: #4070a0; } /* Char */
|
|
|
|
code span.cn { color: #880000; } /* Constant */
|
|
|
|
code span.co { color: #60a0b0; font-style: italic; } /* Comment */
|
|
|
|
code span.cv { color: #60a0b0; font-weight: bold; font-style: italic; } /* CommentVar */
|
|
|
|
code span.do { color: #ba2121; font-style: italic; } /* Documentation */
|
|
|
|
code span.dt { color: #902000; } /* DataType */
|
|
|
|
code span.dv { color: #40a070; } /* DecVal */
|
|
|
|
code span.er { color: #ff0000; font-weight: bold; } /* Error */
|
|
|
|
code span.ex { } /* Extension */
|
|
|
|
code span.fl { color: #40a070; } /* Float */
|
|
|
|
code span.fu { color: #06287e; } /* Function */
|
2022-06-01 04:49:27 +02:00
|
|
|
code span.im { color: #008000; font-weight: bold; } /* Import */
|
2019-09-05 02:33:59 +02:00
|
|
|
code span.in { color: #60a0b0; font-weight: bold; font-style: italic; } /* Information */
|
|
|
|
code span.kw { color: #007020; font-weight: bold; } /* Keyword */
|
|
|
|
code span.op { color: #666666; } /* Operator */
|
|
|
|
code span.ot { color: #007020; } /* Other */
|
|
|
|
code span.pp { color: #bc7a00; } /* Preprocessor */
|
|
|
|
code span.sc { color: #4070a0; } /* SpecialChar */
|
|
|
|
code span.ss { color: #bb6688; } /* SpecialString */
|
|
|
|
code span.st { color: #4070a0; } /* String */
|
|
|
|
code span.va { color: #19177c; } /* Variable */
|
|
|
|
code span.vs { color: #4070a0; } /* VerbatimString */
|
|
|
|
code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warning */
|
2020-05-19 07:45:44 +02:00
|
|
|
.display.math{display: block; text-align: center; margin: 0.5rem auto;}
|
2012-01-25 20:29:42 +01:00
|
|
|
</style>
|
2017-01-25 21:51:26 +01:00
|
|
|
<!--[if lt IE 9]>
|
|
|
|
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
|
|
|
|
<![endif]-->
|
2009-12-31 02:18:35 +01:00
|
|
|
</head>
|
|
|
|
<body>
|
2013-09-01 18:13:31 +02:00
|
|
|
<h1 id="lhs-test">lhs test</h1>
|
2015-12-13 01:22:31 +01:00
|
|
|
<p><code>unsplit</code> is an arrow that takes a pair of values and combines them to
|
|
|
|
return a single value:</p>
|
2020-08-31 21:22:03 +02:00
|
|
|
<div class="sourceCode" id="cb1"><pre class="sourceCode literatehaskell literate"><code class="sourceCode literatehaskell"><span id="cb1-1"><a href="#cb1-1" aria-hidden="true" tabindex="-1"></a><span class="ot">> unsplit ::</span> (<span class="dt">Arrow</span> a) <span class="ot">=></span> (b <span class="ot">-></span> c <span class="ot">-></span> d) <span class="ot">-></span> a (b, c) d</span>
|
|
|
|
<span id="cb1-2"><a href="#cb1-2" aria-hidden="true" tabindex="-1"></a><span class="ot">></span> unsplit <span class="ot">=</span> arr <span class="op">.</span> <span class="fu">uncurry</span></span>
|
|
|
|
<span id="cb1-3"><a href="#cb1-3" aria-hidden="true" tabindex="-1"></a><span class="ot">></span> <span class="co">-- arr (\op (x,y) -> x `op` y)</span></span></code></pre></div>
|
2015-12-13 01:22:31 +01:00
|
|
|
<p><code>(***)</code> combines two arrows into a new arrow by running the two arrows on a
|
|
|
|
pair of values (one arrow on the first item of the pair and one arrow on the
|
|
|
|
second item of the pair).</p>
|
2011-12-28 03:08:06 +01:00
|
|
|
<pre><code>f *** g = first f >>> second g</code></pre>
|
2011-02-05 05:37:58 +01:00
|
|
|
<p>Block quote:</p>
|
|
|
|
<blockquote>
|
2011-02-05 08:25:28 +01:00
|
|
|
<p>foo bar</p>
|
|
|
|
</blockquote>
|
2009-12-31 02:18:35 +01:00
|
|
|
</body>
|
|
|
|
</html>
|