diff --git a/.github/workflows/spec.yml b/.github/workflows/spec.yml
new file mode 100644
index 0000000..dcb911b
--- /dev/null
+++ b/.github/workflows/spec.yml
@@ -0,0 +1,42 @@
+name: spec
+
+on:
+  push:
+    branches: [ '*' ]
+  pull_request:
+    branches: [ 'master' ]
+
+jobs:
+  test:
+    strategy:
+      fail-fast: false
+      matrix:
+        lua-version: ["5.4", "5.3", "5.2", "5.1", "luajit"]
+
+    runs-on: ubuntu-latest
+
+    steps:
+      - uses: actions/checkout@v2
+
+      - uses: leafo/gh-actions-lua@v8.0.0
+        with:
+          luaVersion: ${{ matrix.lua-version }}
+
+      - uses: leafo/gh-actions-luarocks@v4.0.0
+
+      - name: install
+        run: |
+          sudo apt-get install -y libyaml-dev
+          luarocks install ansicolors
+          luarocks install ldoc
+          luarocks install luacov
+          luarocks install specl
+
+      - name: build
+        run: |
+          luarocks make --force
+
+      - name: test
+        run: |
+          specl -vfreport --coverage spec/*_spec.yaml
+          bash <(curl -s https://codecov.io/bash) -f luacov.report.out
diff --git a/.gitignore b/.gitignore
index 19d7cbb..991570e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,8 +1,10 @@
 *~
 *.o
 *.so
+*.html
 *.src.rock
 /ChangeLog
+/doc
 /build-aux/config.ld
 /luacov.*.out
 /lyaml-*.tar.gz
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index 606b286..0000000
--- a/.travis.yml
+++ /dev/null
@@ -1,36 +0,0 @@
-language: python
-
-sudo: false
-
-env:
-  matrix:
-    - VLUA="lua=5.4"
-    - VLUA="lua=5.3"
-    - VLUA="lua=5.2"
-    - VLUA="lua=5.1"
-    - VLUA="luajit=2.1"
-    - VLUA="luajit=2.0"
-
-before_install:
-  - pip install hererocks
-  - hererocks here --luarocks 3 --$VLUA --patch
-  - export PATH=$PWD/here/bin:$PATH
-
-  - hererocks tools --luajit=2.0
-  - export PATH=$PATH:$PWD/here/bin
-
-install:
-  - luarocks --lua-dir=$PWD/tools --tree=$PWD/tools install ldoc
-  - luarocks --lua-dir=$PWD/tools --tree=$PWD/tools install luacov
-  - luarocks install ansicolors
-
-script:
-  - luarocks make --force
-  - luarocks install specl
-  - specl -vfreport --coverage spec/*_spec.yaml
-
-after_success:
-  - bash <(curl -s https://codecov.io/bash) -f luacov.report.out
-
-notifications:
-  slack: aspirinc:JyWeNrIdS0J5nf2Pn2BS1cih
diff --git a/LICENSE b/LICENSE
index 5b171a8..402e64d 100644
--- a/LICENSE
+++ b/LICENSE
@@ -4,7 +4,7 @@ the terms of the MIT license (the same license as Lua itself),
 unless noted otherwise in the body of that file.
 
 ====================================================================
-Copyright (C) 2013-2020 Gary V. Vaughan
+Copyright (C) 2013-2022 Gary V. Vaughan
 
 Permission is hereby granted, free of charge, to any person
 obtaining a copy of this software and associated documentation
diff --git a/NEWS.md b/NEWS.md
index faeab26..0fd4474 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -1,5 +1,13 @@
 # lyaml NEWS - User visible changes
 
+## Noteworthy changes in release ?.? (????-??-??) [?]
+
+### Bug fixes
+
+  - `luke` no longer crashes in `std.normalize` require loops
+    occasionally in Lua 5.4.
+
+
 ## Noteworthy changes in release 6.2.7 (2020-11-27) [stable]
 
 ### Bug fixes
diff --git a/README.md b/README.md
index b330f71..1ae186f 100644
--- a/README.md
+++ b/README.md
@@ -1,11 +1,11 @@
 LYAML
 =====
 
-Copyright (C) 2013-2020 Gary V. Vaughan
+Copyright (C) 2013-2022 Gary V. Vaughan
 
 [![License](https://img.shields.io/:license-mit-blue.svg)](https://mit-license.org)
-[![travis-ci status](https://secure.travis-ci.org/gvvaughan/lyaml.png?branch=release-v6.2.7)](http://travis-ci.org/gvvaughan/lyaml/builds)
-[![codecov.io](https://codecov.io/github/gvvaughan/lyaml/coverage.svg?branch=release-v6.2.7)](https://codecov.io/github/gvvaughan/lyaml?branch=release-v6.2.7)
+[![workflow status](https://github.com/gvvaughan/lyaml/actions/workflows/spec.yml/badge.svg?branch=master)](https://github.com/gvvaughan/lyaml/actions)
+[![codecov.io](https://codecov.io/github/gvvaughan/lyaml/coverage.svg?branch=master)](https://codecov.io/github/gvvaughan/lyaml?branch=master)
 
 [LibYAML] binding for [Lua], with a fast C implementation
 for converting between [%YAML 1.1][yaml11] and [Lua] tables,
diff --git a/build-aux/config.ld.in b/build-aux/config.ld.in
index b339568..0d55b9e 100644
--- a/build-aux/config.ld.in
+++ b/build-aux/config.ld.in
@@ -1,6 +1,6 @@
 --[[
  LYAML binding for Lua 5.1, 5.2, 5.3 & 5.4
- Copyright (C) 2013-2020 Gary V. Vaughan
+ Copyright (C) 2013-2022 Gary V. Vaughan
 ]]
 
 title = '@package@ @version@ Reference'
diff --git a/build-aux/luke b/build-aux/luke
index 2cbcf74..3d61f78 100755
--- a/build-aux/luke
+++ b/build-aux/luke
@@ -17,10 +17,10 @@ end,fatal=fatal,}
 end
 package.preload['luke.cli']=function()
 local _ENV=require'std.normalize'{'luke._base','luke.lukefile','luke.platforms','std.functional',}local function version()print[[
-luke (Luke) 0.2.1
+luke (Luke) 0.2.3
 Written by Gary V. Vaughan <gary@gnu.org>, 2014
 
-Copyright (C) 2020, Gary V. Vaughan
+Copyright (C) 2022, Gary V. Vaughan
 Luke comes with ABSOLUTELY NO WARRANTY.
 You may redistribute copies of Luke under the terms of the MIT license;
 it may be used for any purpose at absolutely no cost, without permission.
@@ -135,6 +135,15 @@ return with(File(progpath,'r'),function(h)return h and isfile(h.context)and prog
 end)end)L.log(found and'found '..found or prog..' not found')return found~=nil
 end
 local function check_header_compile(L,env,config,header,extra_hdrs)return with(CTest(),function(conftest)conftest:write(format('%s\n#include "%s"\n',extra_hdrs,header))return logspawn(L,env,compile_command(L,env,config,conftest.filename))end)end
+local function check_struct_member_compile(L,env,config,structname,member,extra_hdrs)return with(CTest(),function(conftest)conftest:write(format([[
+%s
+int main () {
+static %s aggr;
+if (sizeof aggr.%s)
+    return 0;
+return 0;
+}
+]],extra_hdrs,structname,member))return logspawn(L,env,compile_command(L,env,config,conftest.filename))end)end
 local function try_link(L,env,config,lib,symbol)return with(CTest(),TmpFile(),function(conftest,a_out)conftest:write(format([[
 /* Override any GCC internal prototype to avoid an error.
  Use char because int might match the return type of a GCC
@@ -225,7 +234,7 @@ end
 CONFIGENV.libs=lib..CONFIGENV.libs
 end
 return found_library(L,lib)end
-end)or call(function()L.verbose'\n'fatal("required symbol '%s' not found in any of libc, lib%s",symbol,concat(libraries,', lib'))end)end},{checkfunc=function(L,env,config)checking(L,'for',config.checkfunc)return found_result(L,check_func_link(L,env,config,config.checkfunc))end}),{__call=function(self,L,env,config,prefix)return case(type(config),{['number']=function()return str(config)end,['string']=function()return config
+end)or call(function()L.verbose'\n'fatal("required symbol '%s' not found in any of libc, lib%s",symbol,concat(libraries,', lib'))end)end},{checkfunc=function(L,env,config)checking(L,'for',config.checkfunc)return found_result(L,check_func_link(L,env,config,config.checkfunc))end},{checkmember=function(L,env,config)checking(L,'for',config.checkmember)local extra_hdrs=concat(format_includes(config.includes),'\n')local i=find(config.checkmember,'%.')local structname=sub(config.checkmember,1,i-1)local member=sub(config.checkmember,i+1)return found_result(L,check_struct_member_compile(L,env,config,structname,member,extra_hdrs))end}),{__call=function(self,L,env,config,prefix)return case(type(config),{['number']=function()return str(config)end,['string']=function()return config
 end,['table']=function()return dropuntil(self,function(fname)if config[fname]~=nil then
 add_external_deps(env,config,prefix)return apply(self[fname],list(L,env,config))end
 end)or fatal("unable to configure with keys '%s'",concat(keys(config),"', '"))end,function(type)fatal("unsupported configure type '%s'",type)end,})end,})return{config_compiler=function(L,env)local CC=env.CC
@@ -588,7 +597,7 @@ end
 return setmetatable({append=function(seq,v)local n=(int(seq.n)or len(seq))+1
 seq.n,seq[n]=n,v
 return seq
-end,arg=arg,assert=assert,char=string.char,close=io.close,concat=concat,copy=copy,dirsep=dirsep,exit=os.exit,format=string.format,getenv=os.getenv,getmetatable=getmetatable,getmetamethod=getmetamethod,gmatch=string.gmatch,gsub=string.gsub,int=int,iscallable=iscallable,len=len,lines=io.lines,list=pack,loadstring=loadstring,match=string.match,maxn=function(iterable)local n=0
+end,arg=arg,assert=assert,char=string.char,close=io.close,concat=concat,copy=copy,dirsep=dirsep,exit=os.exit,find=string.find,format=string.format,getenv=os.getenv,getmetatable=getmetatable,getmetamethod=getmetamethod,gmatch=string.gmatch,gsub=string.gsub,int=int,iscallable=iscallable,len=len,lines=io.lines,list=pack,loadstring=loadstring,match=string.match,maxn=function(iterable)local n=0
 for k,v in next,iterable or{}do
 local i=int(k)if i and i>n then
 n=i
@@ -608,7 +617,7 @@ return r
 end,popen=io.popen,print=print,rawget=rawget,rawset=rawset,rep=string.rep,rm=os.remove,select=select,setmetatable=setmetatable,sort=sort,stderr=io.stderr,stdout=io.stdout,str=str,sub=string.sub,tmpname=os.tmpname,tonumber=tonumber,type=type,unpack=function(seq,i,j)return unpack(seq,int(i)or 1,int(j)or int(seq.n)or len(seq))end,write=io.write,},{__call=function(self,env,level)local userenv,level=copy(self),level or 1
 for name,value in next,env do
 if int(name)and type(value)=='string'then
-for k,v in next,require(value)do
+for k,v in next,(require(value))do
 userenv[k]=userenv[k]or v
 end
 else
diff --git a/doc/index.html b/doc/index.html
deleted file mode 100644
index 78463b8..0000000
--- a/doc/index.html
+++ /dev/null
@@ -1,97 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
-<head>
-    <title>lyaml 6.2.7 Reference</title>
-    <link rel="stylesheet" href="ldoc.css" type="text/css" />
-</head>
-<body>
-
-<div id="container">
-
-<div id="product">
-	<div id="product_logo"></div>
-	<div id="product_name"><big><b></b></big></div>
-	<div id="product_description"></div>
-</div> <!-- id="product" -->
-
-
-<div id="main">
-
-
-<!-- Menu -->
-
-<div id="navigation">
-<br/>
-<h1>lyaml 6.2.7</h1>
-
-
-
-
-<h2>Modules</h2>
-<ul class="nowrap">
-  <li><a href="modules/lyaml.html">lyaml</a></li>
-  <li><a href="modules/lyaml.explicit.html">lyaml.explicit</a></li>
-  <li><a href="modules/lyaml.functional.html">lyaml.functional</a></li>
-  <li><a href="modules/lyaml.implicit.html">lyaml.implicit</a></li>
-</ul>
-
-</div>
-
-<div id="content">
-
-
-  <h2>
-<h1>LYAML binding for Lua</h1>
-
-<p>This is a Lua binding for the fast libYAML C library for converting
-between <code>%YAML 1.1</code> and Lua tables, with a flexible Lua language
-API to load and save YAML documents.</p>
-
-<p>It works with Lua 5.1 (including LuaJIT), 5.2, 5.3 and 5.4.</p>
-
-<h2>LICENSE</h2>
-
-<p>The code is copyright by its respective authors, and released under the
-MIT license (the same license as Lua itself).  There is no warranty.</p>
-
-</h2>
-
-<h2>Modules</h2>
-<table class="module_list">
-	<tr>
-		<td class="name"  nowrap><a href="modules/lyaml.html">lyaml</a></td>
-		<td class="summary">
-
-</td>
-	</tr>
-	<tr>
-		<td class="name"  nowrap><a href="modules/lyaml.explicit.html">lyaml.explicit</a></td>
-		<td class="summary">
-
-</td>
-	</tr>
-	<tr>
-		<td class="name"  nowrap><a href="modules/lyaml.functional.html">lyaml.functional</a></td>
-		<td class="summary">
-
-</td>
-	</tr>
-	<tr>
-		<td class="name"  nowrap><a href="modules/lyaml.implicit.html">lyaml.implicit</a></td>
-		<td class="summary">
-
-</td>
-	</tr>
-</table>
-
-</div> <!-- id="content" -->
-</div> <!-- id="main" -->
-<div id="about">
-<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
-<i style="float:right;">Last updated 2020-11-27 16:17:28 </i>
-</div> <!-- id="about" -->
-</div> <!-- id="container" -->
-</body>
-</html>
diff --git a/doc/ldoc.css b/doc/ldoc.css
deleted file mode 100644
index 52c4ad2..0000000
--- a/doc/ldoc.css
+++ /dev/null
@@ -1,303 +0,0 @@
-/* BEGIN RESET
-
-Copyright (c) 2010, Yahoo! Inc. All rights reserved.
-Code licensed under the BSD License:
-http://developer.yahoo.com/yui/license.html
-version: 2.8.2r1
-*/
-html {
-    color: #000;
-    background: #FFF;
-}
-body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,button,textarea,p,blockquote,th,td {
-    margin: 0;
-    padding: 0;
-}
-table {
-    border-collapse: collapse;
-    border-spacing: 0;
-}
-fieldset,img {
-    border: 0;
-}
-address,caption,cite,code,dfn,em,strong,th,var,optgroup {
-    font-style: inherit;
-    font-weight: inherit;
-}
-del,ins {
-    text-decoration: none;
-}
-li {
-    margin-left: 20px;
-}
-caption,th {
-    text-align: left;
-}
-h1,h2,h3,h4,h5,h6 {
-    font-size: 100%;
-    font-weight: bold;
-}
-q:before,q:after {
-    content: '';
-}
-abbr,acronym {
-    border: 0;
-    font-variant: normal;
-}
-sup {
-    vertical-align: baseline;
-}
-sub {
-    vertical-align: baseline;
-}
-legend {
-    color: #000;
-}
-input,button,textarea,select,optgroup,option {
-    font-family: inherit;
-    font-size: inherit;
-    font-style: inherit;
-    font-weight: inherit;
-}
-input,button,textarea,select {*font-size:100%;
-}
-/* END RESET */
-
-body {
-    margin-left: 1em;
-    margin-right: 1em;
-    font-family: arial, helvetica, geneva, sans-serif;
-    background-color: #ffffff; margin: 0px;
-}
-
-code, tt { font-family: monospace; font-size: 1.1em; }
-span.parameter { font-family:monospace; }
-span.parameter:after { content:":"; }
-span.types:before { content:"("; }
-span.types:after { content:")"; }
-.type { font-weight: bold; font-style:italic }
-
-body, p, td, th { font-size: .95em; line-height: 1.2em;}
-
-p, ul { margin: 10px 0 0 0px;}
-
-strong { font-weight: bold;}
-
-em { font-style: italic;}
-
-h1 {
-    font-size: 1.5em;
-    margin: 20px 0 20px 0;
-}
-h2, h3, h4 { margin: 15px 0 10px 0; }
-h2 { font-size: 1.25em; }
-h3 { font-size: 1.15em; }
-h4 { font-size: 1.06em; }
-
-a:link { font-weight: bold; color: #004080; text-decoration: none; }
-a:visited { font-weight: bold; color: #006699; text-decoration: none; }
-a:link:hover { text-decoration: underline; }
-
-hr {
-    color:#cccccc;
-    background: #00007f;
-    height: 1px;
-}
-
-blockquote { margin-left: 3em; }
-
-ul { list-style-type: disc; }
-
-p.name {
-    font-family: "Andale Mono", monospace;
-    padding-top: 1em;
-}
-
-pre {
-    background-color: rgb(245, 245, 245);
-    border: 1px solid #C0C0C0; /* silver */
-    padding: 10px;
-    margin: 10px 0 10px 0;
-    overflow: auto;
-    font-family: "Andale Mono", monospace;
-}
-
-pre.example {
-    font-size: .85em;
-}
-
-table.index { border: 1px #00007f; }
-table.index td { text-align: left; vertical-align: top; }
-
-#container {
-    margin-left: 1em;
-    margin-right: 1em;
-    background-color: #f0f0f0;
-}
-
-#product {
-    text-align: center;
-    border-bottom: 1px solid #cccccc;
-    background-color: #ffffff;
-}
-
-#product big {
-    font-size: 2em;
-}
-
-#main {
-    background-color: #f0f0f0;
-    border-left: 2px solid #cccccc;
-}
-
-#navigation {
-    float: left;
-    width: 14em;
-    vertical-align: top;
-    background-color: #f0f0f0;
-    overflow: visible;
-}
-
-#navigation h2 {
-    background-color:#e7e7e7;
-    font-size:1.1em;
-    color:#000000;
-    text-align: left;
-    padding:0.2em;
-    border-top:1px solid #dddddd;
-    border-bottom:1px solid #dddddd;
-}
-
-#navigation ul
-{
-    font-size:1em;
-    list-style-type: none;
-    margin: 1px 1px 10px 1px;
-}
-
-#navigation li {
-    text-indent: -1em;
-    display: block;
-    margin: 3px 0px 0px 22px;
-}
-
-#navigation li li a {
-    margin: 0px 3px 0px -1em;
-}
-
-#content {
-    margin-left: 14em;
-    padding: 1em;
-    width: 700px;
-    border-left: 2px solid #cccccc;
-    border-right: 2px solid #cccccc;
-    background-color: #ffffff;
-}
-
-#about {
-    clear: both;
-    padding: 5px;
-    border-top: 2px solid #cccccc;
-    background-color: #ffffff;
-}
-
-@media print {
-    body {
-        font: 12pt "Times New Roman", "TimeNR", Times, serif;
-    }
-    a { font-weight: bold; color: #004080; text-decoration: underline; }
-
-    #main {
-        background-color: #ffffff;
-        border-left: 0px;
-    }
-
-    #container {
-        margin-left: 2%;
-        margin-right: 2%;
-        background-color: #ffffff;
-    }
-
-    #content {
-        padding: 1em;
-        background-color: #ffffff;
-    }
-
-    #navigation {
-        display: none;
-    }
-    pre.example {
-        font-family: "Andale Mono", monospace;
-        font-size: 10pt;
-        page-break-inside: avoid;
-    }
-}
-
-table.module_list {
-    border-width: 1px;
-    border-style: solid;
-    border-color: #cccccc;
-    border-collapse: collapse;
-}
-table.module_list td {
-    border-width: 1px;
-    padding: 3px;
-    border-style: solid;
-    border-color: #cccccc;
-}
-table.module_list td.name { background-color: #f0f0f0; min-width: 200px; }
-table.module_list td.summary { width: 100%; }
-
-
-table.function_list {
-    border-width: 1px;
-    border-style: solid;
-    border-color: #cccccc;
-    border-collapse: collapse;
-}
-table.function_list td {
-    border-width: 1px;
-    padding: 3px;
-    border-style: solid;
-    border-color: #cccccc;
-}
-table.function_list td.name { background-color: #f0f0f0; min-width: 200px; }
-table.function_list td.summary { width: 100%; }
-
-ul.nowrap {
-    overflow:auto;
-    white-space:nowrap;
-}
-
-dl.table dt, dl.function dt {border-top: 1px solid #ccc; padding-top: 1em;}
-dl.table dd, dl.function dd {padding-bottom: 1em; margin: 10px 0 0 20px;}
-dl.table h3, dl.function h3 {font-size: .95em;}
-
-/* stop sublists from having initial vertical space */
-ul ul { margin-top: 0px; }
-ol ul { margin-top: 0px; }
-ol ol { margin-top: 0px; }
-ul ol { margin-top: 0px; }
-
-/* make the target distinct; helps when we're navigating to a function */
-a:target + * {
-  background-color: #FF9;
-}
-
-
-/* styles for prettification of source */
-pre .comment { color: #558817; }
-pre .constant { color: #a8660d; }
-pre .escape { color: #844631; }
-pre .keyword { color: #aa5050; font-weight: bold; }
-pre .library { color: #0e7c6b; }
-pre .marker { color: #512b1e; background: #fedc56; font-weight: bold; }
-pre .string { color: #8080ff; }
-pre .number { color: #f8660d; }
-pre .operator { color: #2239a8; font-weight: bold; }
-pre .preprocessor, pre .prepro { color: #a33243; }
-pre .global { color: #800080; }
-pre .user-keyword { color: #800080; }
-pre .prompt { color: #558817; }
-pre .url { color: #272fc2; text-decoration: underline; }
-
diff --git a/doc/modules/lyaml.explicit.html b/doc/modules/lyaml.explicit.html
deleted file mode 100644
index f7470af..0000000
--- a/doc/modules/lyaml.explicit.html
+++ /dev/null
@@ -1,267 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
-<head>
-    <title>lyaml 6.2.7 Reference</title>
-    <link rel="stylesheet" href="../ldoc.css" type="text/css" />
-</head>
-<body>
-
-<div id="container">
-
-<div id="product">
-	<div id="product_logo"></div>
-	<div id="product_name"><big><b></b></big></div>
-	<div id="product_description"></div>
-</div> <!-- id="product" -->
-
-
-<div id="main">
-
-
-<!-- Menu -->
-
-<div id="navigation">
-<br/>
-<h1>lyaml 6.2.7</h1>
-
-<ul>
-  <li><a href="../index.html">Index</a></li>
-</ul>
-
-<h2>Contents</h2>
-<ul>
-<li><a href="#Functions">Functions</a></li>
-</ul>
-
-
-<h2>Modules</h2>
-<ul class="nowrap">
-  <li><a href="../modules/lyaml.html">lyaml</a></li>
-  <li><strong>lyaml.explicit</strong></li>
-  <li><a href="../modules/lyaml.functional.html">lyaml.functional</a></li>
-  <li><a href="../modules/lyaml.implicit.html">lyaml.implicit</a></li>
-</ul>
-
-</div>
-
-<div id="content">
-
-<h1>Module <code>lyaml.explicit</code></h1>
-<p>
-
-</p>
-<p>
-
-</p>
-
-
-<h2><a href="#Functions">Functions</a></h2>
-<table class="function_list">
-	<tr>
-	<td class="name" nowrap><a href="#bool">bool (value)</a></td>
-	<td class="summary">Parse the value following an explicit <code>!!bool</code> tag.</td>
-	</tr>
-	<tr>
-	<td class="name" nowrap><a href="#float">float (value)</a></td>
-	<td class="summary">Parse the value following an explicit <code>!!float</code> tag.</td>
-	</tr>
-	<tr>
-	<td class="name" nowrap><a href="#int">int (value)</a></td>
-	<td class="summary">Parse the value following an explicit <code>!!int</code> tag.</td>
-	</tr>
-	<tr>
-	<td class="name" nowrap><a href="#null">null ()</a></td>
-	<td class="summary">Parse an explicit <code>!!null</code> tag.</td>
-	</tr>
-	<tr>
-	<td class="name" nowrap><a href="#str">str (value)</a></td>
-	<td class="summary">Parse the value following an explicit <code>!!str</code> tag.</td>
-	</tr>
-</table>
-
-<br/>
-<br/>
-
-
-    <h2 class="section-header "><a name="Functions"></a>Functions</h2>
-
-    <dl class="function">
-    <dt>
-    <a name = "bool"></a>
-    <strong>bool (value)</strong>
-    </dt>
-    <dd>
-    Parse the value following an explicit <code>!!bool</code> tag.
-
-
-    <h3>Parameters:</h3>
-    <ul>
-        <li><span class="parameter">value</span>
-         token
-        </li>
-    </ul>
-
-    <h3>Returns:</h3>
-    <ol>
-
-           <span class="types"><a class="type" href="../modules/lyaml.explicit.html#bool">bool</a></span>
-        boolean equivalent, if a valid value was recognized
-    </ol>
-     <h3>Or</h3>
-    <ol>
-
-           <span class="types"><span class="type">nil</span></span>
-        otherwise, nil
-    </ol>
-
-
-
-    <h3>Usage:</h3>
-    <ul>
-        <pre class="example">maybe_bool = explicit.bool(tagarg)</pre>
-    </ul>
-
-</dd>
-    <dt>
-    <a name = "float"></a>
-    <strong>float (value)</strong>
-    </dt>
-    <dd>
-    Parse the value following an explicit <code>!!float</code> tag.
-
-
-    <h3>Parameters:</h3>
-    <ul>
-        <li><span class="parameter">value</span>
-         token
-        </li>
-    </ul>
-
-    <h3>Returns:</h3>
-    <ol>
-
-           <span class="types"><span class="type">number</span></span>
-        float equivalent, if a valid value was recognized
-    </ol>
-     <h3>Or</h3>
-    <ol>
-
-           <span class="types"><span class="type">nil</span></span>
-        otherwise, nil
-    </ol>
-
-
-
-    <h3>Usage:</h3>
-    <ul>
-        <pre class="example">maybe_float = explicit.float(tagarg)</pre>
-    </ul>
-
-</dd>
-    <dt>
-    <a name = "int"></a>
-    <strong>int (value)</strong>
-    </dt>
-    <dd>
-    Parse the value following an explicit <code>!!int</code> tag.
-
-
-    <h3>Parameters:</h3>
-    <ul>
-        <li><span class="parameter">value</span>
-         token
-        </li>
-    </ul>
-
-    <h3>Returns:</h3>
-    <ol>
-
-           <span class="types"><a class="type" href="../modules/lyaml.explicit.html#int">int</a></span>
-        integer equivalent, if a valid value was recognized
-    </ol>
-     <h3>Or</h3>
-    <ol>
-
-           <span class="types"><span class="type">nil</span></span>
-        otherwise, nil
-    </ol>
-
-
-
-    <h3>Usage:</h3>
-    <ul>
-        <pre class="example">maybe_int = explicit.int(tagarg)</pre>
-    </ul>
-
-</dd>
-    <dt>
-    <a name = "null"></a>
-    <strong>null ()</strong>
-    </dt>
-    <dd>
-    Parse an explicit <code>!!null</code> tag.
-
-
-
-    <h3>Returns:</h3>
-    <ol>
-
-           <span class="types"><span class="type">lyaml.null</span></span>
-
-
-
-    </ol>
-
-
-
-    <h3>Usage:</h3>
-    <ul>
-        <pre class="example">null = explicit.null(tagarg)</pre>
-    </ul>
-
-</dd>
-    <dt>
-    <a name = "str"></a>
-    <strong>str (value)</strong>
-    </dt>
-    <dd>
-    Parse the value following an explicit <code>!!str</code> tag.
-
-
-    <h3>Parameters:</h3>
-    <ul>
-        <li><span class="parameter">value</span>
-            <span class="types"><a class="type" href="https://www.lua.org/manual/5.3/manual.html#6.4">string</a></span>
-         token
-        </li>
-    </ul>
-
-    <h3>Returns:</h3>
-    <ol>
-
-           <span class="types"><a class="type" href="https://www.lua.org/manual/5.3/manual.html#6.4">string</a></span>
-        <em>value</em> which was a string already
-    </ol>
-
-
-
-    <h3>Usage:</h3>
-    <ul>
-        <pre class="example">tagarg = explicit.str(tagarg)</pre>
-    </ul>
-
-</dd>
-</dl>
-
-
-</div> <!-- id="content" -->
-</div> <!-- id="main" -->
-<div id="about">
-<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
-<i style="float:right;">Last updated 2020-11-27 16:17:28 </i>
-</div> <!-- id="about" -->
-</div> <!-- id="container" -->
-</body>
-</html>
diff --git a/doc/modules/lyaml.functional.html b/doc/modules/lyaml.functional.html
deleted file mode 100644
index 7b0bdd5..0000000
--- a/doc/modules/lyaml.functional.html
+++ /dev/null
@@ -1,236 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
-<head>
-    <title>lyaml 6.2.7 Reference</title>
-    <link rel="stylesheet" href="../ldoc.css" type="text/css" />
-</head>
-<body>
-
-<div id="container">
-
-<div id="product">
-	<div id="product_logo"></div>
-	<div id="product_name"><big><b></b></big></div>
-	<div id="product_description"></div>
-</div> <!-- id="product" -->
-
-
-<div id="main">
-
-
-<!-- Menu -->
-
-<div id="navigation">
-<br/>
-<h1>lyaml 6.2.7</h1>
-
-<ul>
-  <li><a href="../index.html">Index</a></li>
-</ul>
-
-<h2>Contents</h2>
-<ul>
-<li><a href="#Functions">Functions</a></li>
-<li><a href="#Tables">Tables</a></li>
-</ul>
-
-
-<h2>Modules</h2>
-<ul class="nowrap">
-  <li><a href="../modules/lyaml.html">lyaml</a></li>
-  <li><a href="../modules/lyaml.explicit.html">lyaml.explicit</a></li>
-  <li><strong>lyaml.functional</strong></li>
-  <li><a href="../modules/lyaml.implicit.html">lyaml.implicit</a></li>
-</ul>
-
-</div>
-
-<div id="content">
-
-<h1>Module <code>lyaml.functional</code></h1>
-<p>
-
-</p>
-<p>
-
-</p>
-
-
-<h2><a href="#Functions">Functions</a></h2>
-<table class="function_list">
-	<tr>
-	<td class="name" nowrap><a href="#isnull">isnull (x)</a></td>
-	<td class="summary"><code>lyaml.null</code> predicate.</td>
-	</tr>
-	<tr>
-	<td class="name" nowrap><a href="#iscallable">iscallable (x)</a></td>
-	<td class="summary">Callable predicate.</td>
-	</tr>
-	<tr>
-	<td class="name" nowrap><a href="#anyof">anyof (fns)</a></td>
-	<td class="summary">Compose a function to try each callable with supplied args.</td>
-	</tr>
-	<tr>
-	<td class="name" nowrap><a href="#id">id (...)</a></td>
-	<td class="summary">Return arguments unchanged.</td>
-	</tr>
-</table>
-<h2><a href="#Tables">Tables</a></h2>
-<table class="function_list">
-	<tr>
-	<td class="name" nowrap><a href="#NULL">NULL</a></td>
-	<td class="summary"><code>lyaml.null</code> value.</td>
-	</tr>
-</table>
-
-<br/>
-<br/>
-
-
-    <h2 class="section-header "><a name="Functions"></a>Functions</h2>
-
-    <dl class="function">
-    <dt>
-    <a name = "isnull"></a>
-    <strong>isnull (x)</strong>
-    </dt>
-    <dd>
-    <code>lyaml.null</code> predicate.
-
-
-    <h3>Parameters:</h3>
-    <ul>
-        <li><span class="parameter">x</span>
-         operand
-        </li>
-    </ul>
-
-    <h3>Returns:</h3>
-    <ol>
-
-           <span class="types"><span class="type">bool</span></span>
-        <code>true</code> if <em>x</em> is <code>lyaml.null</code>.
-    </ol>
-
-
-
-
-</dd>
-    <dt>
-    <a name = "iscallable"></a>
-    <strong>iscallable (x)</strong>
-    </dt>
-    <dd>
-    Callable predicate.
-
-
-    <h3>Parameters:</h3>
-    <ul>
-        <li><span class="parameter">x</span>
-         operand
-        </li>
-    </ul>
-
-    <h3>Returns:</h3>
-    <ol>
-
-           <span class="types"><span class="type">bool</span></span>
-        <code>true</code> if <em>x</em> is a function has a __call metamethod
-    </ol>
-
-
-
-    <h3>Usage:</h3>
-    <ul>
-        <pre class="example">r = iscallable(x) <span class="keyword">and</span> x(...)</pre>
-    </ul>
-
-</dd>
-    <dt>
-    <a name = "anyof"></a>
-    <strong>anyof (fns)</strong>
-    </dt>
-    <dd>
-    Compose a function to try each callable with supplied args.
-
-
-    <h3>Parameters:</h3>
-    <ul>
-        <li><span class="parameter">fns</span>
-            <span class="types"><a class="type" href="https://www.lua.org/manual/5.3/manual.html#6.6">table</a></span>
-         list of functions to try
-        </li>
-    </ul>
-
-    <h3>Returns:</h3>
-    <ol>
-
-           <span class="types"><span class="type">function</span></span>
-
-<p>a new function to call <em>...</em> functions, stopping</p>
-<pre><code>and returning the first non-nil result, if any
-</code></pre>
-
-    </ol>
-
-
-
-
-</dd>
-    <dt>
-    <a name = "id"></a>
-    <strong>id (...)</strong>
-    </dt>
-    <dd>
-    Return arguments unchanged.
-
-
-    <h3>Parameters:</h3>
-    <ul>
-        <li><span class="parameter">...</span>
-         arguments
-        </li>
-    </ul>
-
-    <h3>Returns:</h3>
-    <ol>
-
-        <em>...</em>
-    </ol>
-
-
-
-
-</dd>
-</dl>
-    <h2 class="section-header "><a name="Tables"></a>Tables</h2>
-
-    <dl class="function">
-    <dt>
-    <a name = "NULL"></a>
-    <strong>NULL</strong>
-    </dt>
-    <dd>
-    <code>lyaml.null</code> value.
-
-
-
-
-
-
-
-</dd>
-</dl>
-
-
-</div> <!-- id="content" -->
-</div> <!-- id="main" -->
-<div id="about">
-<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
-<i style="float:right;">Last updated 2020-11-27 16:17:28 </i>
-</div> <!-- id="about" -->
-</div> <!-- id="container" -->
-</body>
-</html>
diff --git a/doc/modules/lyaml.html b/doc/modules/lyaml.html
deleted file mode 100644
index 73a2a01..0000000
--- a/doc/modules/lyaml.html
+++ /dev/null
@@ -1,224 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
-<head>
-    <title>lyaml 6.2.7 Reference</title>
-    <link rel="stylesheet" href="../ldoc.css" type="text/css" />
-</head>
-<body>
-
-<div id="container">
-
-<div id="product">
-	<div id="product_logo"></div>
-	<div id="product_name"><big><b></b></big></div>
-	<div id="product_description"></div>
-</div> <!-- id="product" -->
-
-
-<div id="main">
-
-
-<!-- Menu -->
-
-<div id="navigation">
-<br/>
-<h1>lyaml 6.2.7</h1>
-
-<ul>
-  <li><a href="../index.html">Index</a></li>
-</ul>
-
-<h2>Contents</h2>
-<ul>
-<li><a href="#Functions">Functions</a></li>
-<li><a href="#Tables">Tables</a></li>
-</ul>
-
-
-<h2>Modules</h2>
-<ul class="nowrap">
-  <li><strong>lyaml</strong></li>
-  <li><a href="../modules/lyaml.explicit.html">lyaml.explicit</a></li>
-  <li><a href="../modules/lyaml.functional.html">lyaml.functional</a></li>
-  <li><a href="../modules/lyaml.implicit.html">lyaml.implicit</a></li>
-</ul>
-
-</div>
-
-<div id="content">
-
-<h1>Module <code>lyaml</code></h1>
-<p>
-
-</p>
-<p>
-
-</p>
-
-
-<h2><a href="#Functions">Functions</a></h2>
-<table class="function_list">
-	<tr>
-	<td class="name" nowrap><a href="#dump">dump (documents[, opts])</a></td>
-	<td class="summary">Dump a list of Lua tables to an equivalent YAML stream.</td>
-	</tr>
-	<tr>
-	<td class="name" nowrap><a href="#load">load (s[, opts])</a></td>
-	<td class="summary">Load a YAML stream into a Lua table.</td>
-	</tr>
-</table>
-<h2><a href="#Tables">Tables</a></h2>
-<table class="function_list">
-	<tr>
-	<td class="name" nowrap><a href="#dumper_opts">dumper_opts</a></td>
-	<td class="summary">Dump options table.</td>
-	</tr>
-	<tr>
-	<td class="name" nowrap><a href="#loader_opts">loader_opts</a></td>
-	<td class="summary">Load options table.</td>
-	</tr>
-</table>
-
-<br/>
-<br/>
-
-
-    <h2 class="section-header "><a name="Functions"></a>Functions</h2>
-
-    <dl class="function">
-    <dt>
-    <a name = "dump"></a>
-    <strong>dump (documents[, opts])</strong>
-    </dt>
-    <dd>
-    Dump a list of Lua tables to an equivalent YAML stream.
-
-
-    <h3>Parameters:</h3>
-    <ul>
-        <li><span class="parameter">documents</span>
-            <span class="types"><a class="type" href="https://www.lua.org/manual/5.3/manual.html#6.6">table</a></span>
-         a sequence of Lua tables.
-        </li>
-        <li><span class="parameter">opts</span>
-            <span class="types"><span class="type">dumper_opts</span></span>
-         initialisation options
-         (<em>optional</em>)
-        </li>
-    </ul>
-
-    <h3>Returns:</h3>
-    <ol>
-
-           <span class="types"><a class="type" href="https://www.lua.org/manual/5.3/manual.html#6.4">string</a></span>
-        equivalest YAML stream
-    </ol>
-
-
-
-
-</dd>
-    <dt>
-    <a name = "load"></a>
-    <strong>load (s[, opts])</strong>
-    </dt>
-    <dd>
-    Load a YAML stream into a Lua table.
-
-
-    <h3>Parameters:</h3>
-    <ul>
-        <li><span class="parameter">s</span>
-            <span class="types"><a class="type" href="https://www.lua.org/manual/5.3/manual.html#6.4">string</a></span>
-         YAML stream
-        </li>
-        <li><span class="parameter">opts</span>
-            <span class="types"><span class="type">loader_opts</span></span>
-         initialisation options
-         (<em>optional</em>)
-        </li>
-    </ul>
-
-    <h3>Returns:</h3>
-    <ol>
-
-           <span class="types"><a class="type" href="https://www.lua.org/manual/5.3/manual.html#6.6">table</a></span>
-        Lua table equivalent of stream <em>s</em>
-    </ol>
-
-
-
-
-</dd>
-</dl>
-    <h2 class="section-header "><a name="Tables"></a>Tables</h2>
-
-    <dl class="function">
-    <dt>
-    <a name = "dumper_opts"></a>
-    <strong>dumper_opts</strong>
-    </dt>
-    <dd>
-    Dump options table.
-
-
-    <h3>Fields:</h3>
-    <ul>
-        <li><span class="parameter">anchors</span>
-            <span class="types"><a class="type" href="https://www.lua.org/manual/5.3/manual.html#6.6">table</a></span>
-         map initial anchor names to values
-        </li>
-        <li><span class="parameter">implicit_scalar</span>
-            <span class="types"><span class="type">function</span></span>
-         parse implicit scalar values
-        </li>
-    </ul>
-
-
-
-
-
-</dd>
-    <dt>
-    <a name = "loader_opts"></a>
-    <strong>loader_opts</strong>
-    </dt>
-    <dd>
-    Load options table.
-
-
-    <h3>Fields:</h3>
-    <ul>
-        <li><span class="parameter">all</span>
-            <span class="types"><span class="type">boolean</span></span>
-         load all documents from the stream
-        </li>
-        <li><span class="parameter">explicit_scalar</span>
-            <span class="types"><a class="type" href="https://www.lua.org/manual/5.3/manual.html#6.6">table</a></span>
-         map full tag-names to parser functions
-        </li>
-        <li><span class="parameter">implicit_scalar</span>
-            <span class="types"><span class="type">function</span></span>
-         parse implicit scalar values
-        </li>
-    </ul>
-
-
-
-
-
-</dd>
-</dl>
-
-
-</div> <!-- id="content" -->
-</div> <!-- id="main" -->
-<div id="about">
-<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
-<i style="float:right;">Last updated 2020-11-27 16:17:28 </i>
-</div> <!-- id="about" -->
-</div> <!-- id="container" -->
-</body>
-</html>
diff --git a/doc/modules/lyaml.implicit.html b/doc/modules/lyaml.implicit.html
deleted file mode 100644
index 004d875..0000000
--- a/doc/modules/lyaml.implicit.html
+++ /dev/null
@@ -1,533 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
-<head>
-    <title>lyaml 6.2.7 Reference</title>
-    <link rel="stylesheet" href="../ldoc.css" type="text/css" />
-</head>
-<body>
-
-<div id="container">
-
-<div id="product">
-	<div id="product_logo"></div>
-	<div id="product_name"><big><b></b></big></div>
-	<div id="product_description"></div>
-</div> <!-- id="product" -->
-
-
-<div id="main">
-
-
-<!-- Menu -->
-
-<div id="navigation">
-<br/>
-<h1>lyaml 6.2.7</h1>
-
-<ul>
-  <li><a href="../index.html">Index</a></li>
-</ul>
-
-<h2>Contents</h2>
-<ul>
-<li><a href="#Functions">Functions</a></li>
-</ul>
-
-
-<h2>Modules</h2>
-<ul class="nowrap">
-  <li><a href="../modules/lyaml.html">lyaml</a></li>
-  <li><a href="../modules/lyaml.explicit.html">lyaml.explicit</a></li>
-  <li><a href="../modules/lyaml.functional.html">lyaml.functional</a></li>
-  <li><strong>lyaml.implicit</strong></li>
-</ul>
-
-</div>
-
-<div id="content">
-
-<h1>Module <code>lyaml.implicit</code></h1>
-<p>
-
-</p>
-<p>
-
-</p>
-
-
-<h2><a href="#Functions">Functions</a></h2>
-<table class="function_list">
-	<tr>
-	<td class="name" nowrap><a href="#null">null (value)</a></td>
-	<td class="summary">Parse a null token to a null value.</td>
-	</tr>
-	<tr>
-	<td class="name" nowrap><a href="#bool">bool (value)</a></td>
-	<td class="summary">Parse a boolean token to the equivalent value.</td>
-	</tr>
-	<tr>
-	<td class="name" nowrap><a href="#binary">binary (value)</a></td>
-	<td class="summary">Parse a binary token, such as '0b1010_0111_0100_1010_1110'.</td>
-	</tr>
-	<tr>
-	<td class="name" nowrap><a href="#octal">octal (value)</a></td>
-	<td class="summary">Parse an octal token, such as '012345'.</td>
-	</tr>
-	<tr>
-	<td class="name" nowrap><a href="#decimal">decimal (value)</a></td>
-	<td class="summary">Parse a decimal token, such as '0' or '12345'.</td>
-	</tr>
-	<tr>
-	<td class="name" nowrap><a href="#hexadecimal">hexadecimal (value)</a></td>
-	<td class="summary">Parse a hexadecimal token, such as '0xdeadbeef'.</td>
-	</tr>
-	<tr>
-	<td class="name" nowrap><a href="#sexagesimal">sexagesimal (value)</a></td>
-	<td class="summary">Parse a sexagesimal token, such as '190:20:30'.</td>
-	</tr>
-	<tr>
-	<td class="name" nowrap><a href="#nan">nan (value)</a></td>
-	<td class="summary">Parse a <code>nan</code> token.</td>
-	</tr>
-	<tr>
-	<td class="name" nowrap><a href="#inf">inf (value)</a></td>
-	<td class="summary">Parse a signed <code>inf</code> token.</td>
-	</tr>
-	<tr>
-	<td class="name" nowrap><a href="#float">float (value)</a></td>
-	<td class="summary">Parse a floating point number token, such as '1e-3' or '-0.12'.</td>
-	</tr>
-	<tr>
-	<td class="name" nowrap><a href="#sexfloat">sexfloat (value)</a></td>
-	<td class="summary">Parse a sexagesimal float, such as '190:20:30.15'.</td>
-	</tr>
-</table>
-
-<br/>
-<br/>
-
-
-    <h2 class="section-header "><a name="Functions"></a>Functions</h2>
-
-    <dl class="function">
-    <dt>
-    <a name = "null"></a>
-    <strong>null (value)</strong>
-    </dt>
-    <dd>
-    Parse a null token to a null value.
-
-
-    <h3>Parameters:</h3>
-    <ul>
-        <li><span class="parameter">value</span>
-         token
-        </li>
-    </ul>
-
-    <h3>Returns:</h3>
-    <ol>
-
-        lyaml.null, for an empty string or literal ~
-    </ol>
-     <h3>Or</h3>
-    <ol>
-
-        nil otherwise, nil
-    </ol>
-
-
-
-    <h3>Usage:</h3>
-    <ul>
-        <pre class="example">maybe_null = implicit.null(token)</pre>
-    </ul>
-
-</dd>
-    <dt>
-    <a name = "bool"></a>
-    <strong>bool (value)</strong>
-    </dt>
-    <dd>
-    Parse a boolean token to the equivalent value.
- Treats capilalized, lower and upper-cased variants of true/false,
- yes/no or on/off tokens as boolean <code>true</code> and <code>false</code> values.
-
-
-    <h3>Parameters:</h3>
-    <ul>
-        <li><span class="parameter">value</span>
-         token
-        </li>
-    </ul>
-
-    <h3>Returns:</h3>
-    <ol>
-
-           <span class="types"><a class="type" href="../modules/lyaml.implicit.html#bool">bool</a></span>
-        if a valid boolean token was recognized
-    </ol>
-     <h3>Or</h3>
-    <ol>
-
-           <span class="types"><span class="type">nil</span></span>
-        otherwise, nil
-    </ol>
-
-
-
-    <h3>Usage:</h3>
-    <ul>
-        <pre class="example">maybe_bool = implicit.bool(token)</pre>
-    </ul>
-
-</dd>
-    <dt>
-    <a name = "binary"></a>
-    <strong>binary (value)</strong>
-    </dt>
-    <dd>
-    Parse a binary token, such as '0b1010_0111_0100_1010_1110'.
-
-
-    <h3>Parameters:</h3>
-    <ul>
-        <li><span class="parameter">value</span>
-            <span class="types"><a class="type" href="https://www.lua.org/manual/5.3/manual.html#6.4">string</a></span>
-         token
-        </li>
-    </ul>
-
-    <h3>Returns:</h3>
-    <ol>
-
-           <span class="types"><span class="type">int</span></span>
-        integer equivalent, if a valid token was recognized
-    </ol>
-     <h3>Or</h3>
-    <ol>
-
-           <span class="types"><span class="type">nil</span></span>
-        otherwise, nil
-    </ol>
-
-
-
-    <h3>Usage:</h3>
-    <ul>
-        <pre class="example">maybe_int = implicit.binary(value)</pre>
-    </ul>
-
-</dd>
-    <dt>
-    <a name = "octal"></a>
-    <strong>octal (value)</strong>
-    </dt>
-    <dd>
-    Parse an octal token, such as '012345'.
-
-
-    <h3>Parameters:</h3>
-    <ul>
-        <li><span class="parameter">value</span>
-            <span class="types"><a class="type" href="https://www.lua.org/manual/5.3/manual.html#6.4">string</a></span>
-         token
-        </li>
-    </ul>
-
-    <h3>Returns:</h3>
-    <ol>
-
-           <span class="types"><span class="type">int</span></span>
-        integer equivalent, if a valid token was recognized
-    </ol>
-     <h3>Or</h3>
-    <ol>
-
-           <span class="types"><span class="type">nil</span></span>
-        otherwise, nil
-    </ol>
-
-
-
-    <h3>Usage:</h3>
-    <ul>
-        <pre class="example">maybe_int = implicit.octal(value)</pre>
-    </ul>
-
-</dd>
-    <dt>
-    <a name = "decimal"></a>
-    <strong>decimal (value)</strong>
-    </dt>
-    <dd>
-    Parse a decimal token, such as '0' or '12345'.
-
-
-    <h3>Parameters:</h3>
-    <ul>
-        <li><span class="parameter">value</span>
-            <span class="types"><a class="type" href="https://www.lua.org/manual/5.3/manual.html#6.4">string</a></span>
-         token
-        </li>
-    </ul>
-
-    <h3>Returns:</h3>
-    <ol>
-
-           <span class="types"><span class="type">int</span></span>
-        integer equivalent, if a valid token was recognized
-    </ol>
-     <h3>Or</h3>
-    <ol>
-
-           <span class="types"><span class="type">nil</span></span>
-        otherwise, nil
-    </ol>
-
-
-
-    <h3>Usage:</h3>
-    <ul>
-        <pre class="example">maybe_int = implicit.decimal(value)</pre>
-    </ul>
-
-</dd>
-    <dt>
-    <a name = "hexadecimal"></a>
-    <strong>hexadecimal (value)</strong>
-    </dt>
-    <dd>
-    Parse a hexadecimal token, such as '0xdeadbeef'.
-
-
-    <h3>Parameters:</h3>
-    <ul>
-        <li><span class="parameter">value</span>
-            <span class="types"><a class="type" href="https://www.lua.org/manual/5.3/manual.html#6.4">string</a></span>
-         token
-        </li>
-    </ul>
-
-    <h3>Returns:</h3>
-    <ol>
-
-           <span class="types"><span class="type">int</span></span>
-        integer equivalent, if a valid token was recognized
-    </ol>
-     <h3>Or</h3>
-    <ol>
-
-           <span class="types"><span class="type">nil</span></span>
-        otherwise, nil
-    </ol>
-
-
-
-    <h3>Usage:</h3>
-    <ul>
-        <pre class="example">maybe_int = implicit.hexadecimal(value)</pre>
-    </ul>
-
-</dd>
-    <dt>
-    <a name = "sexagesimal"></a>
-    <strong>sexagesimal (value)</strong>
-    </dt>
-    <dd>
-    Parse a sexagesimal token, such as '190:20:30'.
- Useful for times and angles.
-
-
-    <h3>Parameters:</h3>
-    <ul>
-        <li><span class="parameter">value</span>
-            <span class="types"><a class="type" href="https://www.lua.org/manual/5.3/manual.html#6.4">string</a></span>
-         token
-        </li>
-    </ul>
-
-    <h3>Returns:</h3>
-    <ol>
-
-           <span class="types"><span class="type">int</span></span>
-        integer equivalent, if a valid token was recognized
-    </ol>
-     <h3>Or</h3>
-    <ol>
-
-           <span class="types"><span class="type">nil</span></span>
-        otherwise, nil
-    </ol>
-
-
-
-    <h3>Usage:</h3>
-    <ul>
-        <pre class="example">maybe_int = implicit.sexagesimal(value)</pre>
-    </ul>
-
-</dd>
-    <dt>
-    <a name = "nan"></a>
-    <strong>nan (value)</strong>
-    </dt>
-    <dd>
-    Parse a <code>nan</code> token.
-
-
-    <h3>Parameters:</h3>
-    <ul>
-        <li><span class="parameter">value</span>
-            <span class="types"><a class="type" href="https://www.lua.org/manual/5.3/manual.html#6.4">string</a></span>
-         token
-        </li>
-    </ul>
-
-    <h3>Returns:</h3>
-    <ol>
-
-           <span class="types"><a class="type" href="../modules/lyaml.implicit.html#nan">nan</a></span>
-        not-a-number, if a valid token was recognized
-    </ol>
-     <h3>Or</h3>
-    <ol>
-
-           <span class="types"><span class="type">nil</span></span>
-        otherwise, nil
-    </ol>
-
-
-
-    <h3>Usage:</h3>
-    <ul>
-        <pre class="example">maybe_nan = implicit.nan(value)</pre>
-    </ul>
-
-</dd>
-    <dt>
-    <a name = "inf"></a>
-    <strong>inf (value)</strong>
-    </dt>
-    <dd>
-    Parse a signed <code>inf</code> token.
-
-
-    <h3>Parameters:</h3>
-    <ul>
-        <li><span class="parameter">value</span>
-            <span class="types"><a class="type" href="https://www.lua.org/manual/5.3/manual.html#6.4">string</a></span>
-         token
-        </li>
-    </ul>
-
-    <h3>Returns:</h3>
-    <ol>
-
-           <span class="types"><span class="type">number</span></span>
-        plus/minus-infinity, if a valid token was recognized
-    </ol>
-     <h3>Or</h3>
-    <ol>
-
-           <span class="types"><span class="type">nil</span></span>
-        otherwise, nil
-    </ol>
-
-
-
-    <h3>Usage:</h3>
-    <ul>
-        <pre class="example">maybe_inf = implicit.inf(value)</pre>
-    </ul>
-
-</dd>
-    <dt>
-    <a name = "float"></a>
-    <strong>float (value)</strong>
-    </dt>
-    <dd>
-    Parse a floating point number token, such as '1e-3' or '-0.12'.
-
-
-    <h3>Parameters:</h3>
-    <ul>
-        <li><span class="parameter">value</span>
-            <span class="types"><a class="type" href="https://www.lua.org/manual/5.3/manual.html#6.4">string</a></span>
-         token
-        </li>
-    </ul>
-
-    <h3>Returns:</h3>
-    <ol>
-
-           <span class="types"><span class="type">number</span></span>
-        float equivalent, if a valid token was recognized
-    </ol>
-     <h3>Or</h3>
-    <ol>
-
-           <span class="types"><span class="type">nil</span></span>
-        otherwise, nil
-    </ol>
-
-
-
-    <h3>Usage:</h3>
-    <ul>
-        <pre class="example">maybe_float = implicit.float(value)</pre>
-    </ul>
-
-</dd>
-    <dt>
-    <a name = "sexfloat"></a>
-    <strong>sexfloat (value)</strong>
-    </dt>
-    <dd>
-    Parse a sexagesimal float, such as '190:20:30.15'.
- Useful for times and angles.
-
-
-    <h3>Parameters:</h3>
-    <ul>
-        <li><span class="parameter">value</span>
-            <span class="types"><a class="type" href="https://www.lua.org/manual/5.3/manual.html#6.4">string</a></span>
-         token
-        </li>
-    </ul>
-
-    <h3>Returns:</h3>
-    <ol>
-
-           <span class="types"><span class="type">number</span></span>
-        float equivalent, if a valid token was recognized
-    </ol>
-     <h3>Or</h3>
-    <ol>
-
-           <span class="types"><span class="type">nil</span></span>
-        otherwise, nil
-    </ol>
-
-
-
-    <h3>Usage:</h3>
-    <ul>
-        <pre class="example">maybe_float = implicit.sexfloat(value)</pre>
-    </ul>
-
-</dd>
-</dl>
-
-
-</div> <!-- id="content" -->
-</div> <!-- id="main" -->
-<div id="about">
-<i>generated by <a href="http://github.com/stevedonovan/LDoc">LDoc 1.4.6</a></i>
-<i style="float:right;">Last updated 2020-11-27 16:17:28 </i>
-</div> <!-- id="about" -->
-</div> <!-- id="container" -->
-</body>
-</html>
diff --git a/ext/yaml/emitter.c b/ext/yaml/emitter.c
index aaf77df..5b751f2 100644
--- a/ext/yaml/emitter.c
+++ b/ext/yaml/emitter.c
@@ -2,7 +2,7 @@
  * emitter.c, LibYAML emitter binding for Lua
  * Written by Gary V. Vaughan, 2013
  *
- * Copyright (C) 2013-2020 Gary V. Vaughan
+ * Copyright (C) 2013-2022 Gary V. Vaughan
  *
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to deal
diff --git a/ext/yaml/lyaml.h b/ext/yaml/lyaml.h
index d085b4d..9892a48 100644
--- a/ext/yaml/lyaml.h
+++ b/ext/yaml/lyaml.h
@@ -2,7 +2,7 @@
  * lyaml.h, libyaml parser binding for Lua
  * Written by Gary V. Vaughan, 2013
  *
- * Copyright (C) 2013-2020 Gary V. Vaughan
+ * Copyright (C) 2013-2022 Gary V. Vaughan
  *
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to deal
diff --git a/ext/yaml/parser.c b/ext/yaml/parser.c
index a835e53..3136abd 100644
--- a/ext/yaml/parser.c
+++ b/ext/yaml/parser.c
@@ -2,7 +2,7 @@
  * parser.c, libyaml parser binding for Lua
  * Written by Gary V. Vaughan, 2013
  *
- * Copyright (C) 2013-2020 Gary V. Vaughan
+ * Copyright (C) 2013-2022 Gary V. Vaughan
  *
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to deal
diff --git a/ext/yaml/scanner.c b/ext/yaml/scanner.c
index de6024f..6d72765 100644
--- a/ext/yaml/scanner.c
+++ b/ext/yaml/scanner.c
@@ -2,7 +2,7 @@
  * scanner.c, libyaml scanner binding for Lua
  * Written by Gary V. Vaughan, 2013
  *
- * Copyright (C) 2013-2020 Gary V. Vaughan
+ * Copyright (C) 2013-2022 Gary V. Vaughan
  *
  * Permission is hereby granted, free of charge, to any person obtaining a copy
  * of this software and associated documentation files (the "Software"), to deal
diff --git a/ext/yaml/yaml.c b/ext/yaml/yaml.c
index c0ee514..5447861 100644
--- a/ext/yaml/yaml.c
+++ b/ext/yaml/yaml.c
@@ -2,7 +2,7 @@
  * yaml.c, LibYAML binding for Lua
  * Written by Andrew Danforth, 2009
  *
- * Copyright (C) 2014-2020 Gary V. Vaughan
+ * Copyright (C) 2014-2022 Gary V. Vaughan
  * Copyright (C) 2009 Andrew Danforth
  *
  * Permission is hereby granted, free of charge, to any person obtaining a copy
diff --git a/lib/lyaml/explicit.lua b/lib/lyaml/explicit.lua
index 0e11f3b..98a3833 100644
--- a/lib/lyaml/explicit.lua
+++ b/lib/lyaml/explicit.lua
@@ -1,7 +1,7 @@
 -- LYAML parse explicit token values.
 -- Written by Gary V. Vaughan, 2015
 --
--- Copyright(C) 2015-2020 Gary V. Vaughan
+-- Copyright(C) 2015-2022 Gary V. Vaughan
 --
 -- Permission is hereby granted, free of charge, to any person obtaining
 -- a copy of this software and associated documentation files(the
diff --git a/lib/lyaml/functional.lua b/lib/lyaml/functional.lua
index e61ef4b..556e948 100644
--- a/lib/lyaml/functional.lua
+++ b/lib/lyaml/functional.lua
@@ -1,7 +1,7 @@
 -- Minimal functional programming utilities.
 -- Written by Gary V. Vaughan, 2015
 --
--- Copyright(C) 2015-2020 Gary V. Vaughan
+-- Copyright(C) 2015-2022 Gary V. Vaughan
 --
 -- Permission is hereby granted, free of charge, to any person obtaining
 -- a copy of this software and associated documentation files(the
diff --git a/lib/lyaml/implicit.lua b/lib/lyaml/implicit.lua
index 80e4c18..fe58025 100644
--- a/lib/lyaml/implicit.lua
+++ b/lib/lyaml/implicit.lua
@@ -1,7 +1,7 @@
 -- LYAML parse implicit type tokens.
 -- Written by Gary V. Vaughan, 2015
 --
--- Copyright(C) 2015-2020 Gary V. Vaughan
+-- Copyright(C) 2015-2022 Gary V. Vaughan
 --
 -- Permission is hereby granted, free of charge, to any person obtaining
 -- a copy of this software and associated documentation files(the
diff --git a/lib/lyaml/init.lua b/lib/lyaml/init.lua
index 22317b5..95e4036 100644
--- a/lib/lyaml/init.lua
+++ b/lib/lyaml/init.lua
@@ -1,7 +1,7 @@
 -- Transform between YAML 1.1 streams and Lua table representations.
 -- Written by Gary V. Vaughan, 2013
 --
--- Copyright(C) 2013-2020 Gary V. Vaughan
+-- Copyright(C) 2013-2022 Gary V. Vaughan
 --
 -- Permission is hereby granted, free of charge, to any person obtaining
 -- a copy of this software and associated documentation files(the
diff --git a/lukefile b/lukefile
index 6e8e620..318281f 100644
--- a/lukefile
+++ b/lukefile
@@ -1,6 +1,6 @@
 --[[
  LYAML binding for Lua 5.1, 5.2, 5.3 & 5.4
- Copyright (C) 2013-2020 Gary V. Vaughan
+ Copyright (C) 2013-2022 Gary V. Vaughan
 ]]
 
 package  = 'lyaml'
diff --git a/lyaml-6.2.7-1.rockspec b/lyaml-git-1.rockspec
similarity index 97%
rename from lyaml-6.2.7-1.rockspec
rename to lyaml-git-1.rockspec
index 20ff54a..f29802b 100644
--- a/lyaml-6.2.7-1.rockspec
+++ b/lyaml-git-1.rockspec
@@ -1,4 +1,4 @@
-local _MODREV, _SPECREV = '6.2.7', '-1'
+local _MODREV, _SPECREV = 'git', '-1'
 
 package = 'lyaml'
 version = _MODREV .. _SPECREV
diff --git a/spec/ext_yaml_emitter_spec.yaml b/spec/ext_yaml_emitter_spec.yaml
index 3c0e818..385d58f 100644
--- a/spec/ext_yaml_emitter_spec.yaml
+++ b/spec/ext_yaml_emitter_spec.yaml
@@ -1,5 +1,5 @@
 # LYAML binding for Lua 5.1, 5.2, 5.3 & 5.4
-# Copyright (C) 2013-2020 Gary V. Vaughan
+# Copyright (C) 2013-2022 Gary V. Vaughan
 
 specify emitting:
 - it diagnoses an invalid event:
diff --git a/spec/ext_yaml_parser_spec.yaml b/spec/ext_yaml_parser_spec.yaml
index 7aa4b56..2438c42 100644
--- a/spec/ext_yaml_parser_spec.yaml
+++ b/spec/ext_yaml_parser_spec.yaml
@@ -1,5 +1,5 @@
 # LYAML binding for Lua 5.1, 5.2, 5.3 & 5.4
-# Copyright (C) 2013-2020 Gary V. Vaughan
+# Copyright (C) 2013-2022 Gary V. Vaughan
 
 specify parsing:
 - it parses empty streams:
diff --git a/spec/ext_yaml_scanner_spec.yaml b/spec/ext_yaml_scanner_spec.yaml
index 0a22cfb..4d8e633 100644
--- a/spec/ext_yaml_scanner_spec.yaml
+++ b/spec/ext_yaml_scanner_spec.yaml
@@ -1,5 +1,5 @@
 # LYAML binding for Lua 5.1, 5.2, 5.3 & 5.4
-# Copyright (C) 2013-2020 Gary V. Vaughan
+# Copyright (C) 2013-2022 Gary V. Vaughan
 
 before:
   function consume (n, str)
diff --git a/spec/lib_lyaml_functional_spec.yaml b/spec/lib_lyaml_functional_spec.yaml
index 0f576b8..cfd8676 100644
--- a/spec/lib_lyaml_functional_spec.yaml
+++ b/spec/lib_lyaml_functional_spec.yaml
@@ -1,5 +1,5 @@
 # LYAML binding for Lua 5.1, 5.2, 5.3 & 5.4
-# Copyright (C) 2013-2020 Gary V. Vaughan
+# Copyright (C) 2013-2022 Gary V. Vaughan
 
 before:
   this_module = 'lyaml.functional'
diff --git a/spec/lib_lyaml_spec.yaml b/spec/lib_lyaml_spec.yaml
index 244cd08..f6c7e1e 100644
--- a/spec/lib_lyaml_spec.yaml
+++ b/spec/lib_lyaml_spec.yaml
@@ -1,5 +1,5 @@
 # LYAML binding for Lua 5.1, 5.2, 5.3 & 5.4
-# Copyright (C) 2013-2020 Gary V. Vaughan
+# Copyright (C) 2013-2022 Gary V. Vaughan
 
 before: |
   lyaml = require "lyaml"
diff --git a/spec/spec_helper.lua b/spec/spec_helper.lua
index cf9e9b9..1ba7a3a 100644
--- a/spec/spec_helper.lua
+++ b/spec/spec_helper.lua
@@ -1,6 +1,6 @@
 --[[
  LYAML binding for Lua 5.1, 5.2, 5.3 & 5.4
- Copyright (C) 2013-2020 Gary V. Vaughan
+ Copyright (C) 2013-2022 Gary V. Vaughan
 ]]
 
 do