As
[suggested](https://github.com/unisonweb/unison/pull/2959#issuecomment-1057059547)
by @pchiusano.
There was another suggestion to filter to only terms that match subtypes
of `{Exception, IO} ()`. So far I haven't done that, because I'm not
very familiar with these types and am having trouble figuring out how to
get type information out of relations and referents.
Closes#2961, hopefully.
We could probably delete the macOS 10.15 build at some point since they are up to macOS 12 now and we don't build separate binaries anyway.
* Fallback to `more` if `less` is unavailable
* Use UNISON_PAGER instead of PAGER
Common options for PAGER don't work well with the way ucm expects the
pager to behave.
Trunk currently runs all of the transcripts by shelling out to the unison cli, this causes two problems:
* It's slow to boot up a fresh ucm for every transcript
* On Windows, we're likely to encounter [this bug](https://github.com/commercialhaskell/stack/issues/5038) which comes up when using `readProcess`, I'm noticing when I run transcripts on windows it inserts a ton of `++stty: 'standard input': Inappropriate ioctl for device` into output files.
As far as speedup goes, a quick benchmark on non-optimized builds shaves off ~90 seconds!
```
New version
/usr/bin/time stack exec transcripts
103.79 real 153.25 user 89.79 sys
/usr/bin/time stack exec transcripts
193.79 real 183.08 user 6.97 sys
```
Implementation notes
* Define `withTranscriptRunner`, which does a single initialization and then provides a transcript runner to the provided action. The caller can run any number of transcripts without re-initializing the runtime.
* Rather than crash the with an `exit 1` on failure and then detect that exit code, we return an Either which can be handled as a test failure.
Expand the Doc Embed variant to support embedding videos and
frontmatter. The latter will be rendered at the top of the output of the
html file rendered via the `docs.to-html` command.