.
total functions and error handling, via MonadThrow

refactor partial functions into total functions

refactor "Possibly a = (Monad m) => m a" into "Possibly a = (MonadThrow
m) => m a"

Parsec parsers / smart constructors / any failable computation: all return
Possibly a. we can mix Maybe with Either with Q with IO, via MonadThrow.
.
file's (not template's) line/column on parse error

with Parsec.setPosition and TH.location
.
parseTemplate wraps a Parser with source file info
lift : compile-time Grammar -> runtime Grammatical

see Commands.TH.Instance.Grammar.buildGrammarI
.
refactor Grammar: Traversal fields, newtypes

move Grammar to be defined with Grammatical

make Terminal/NonTerminal into newtypes, for type safety
distinguishes constructor Names from type Names

for terminals/nonTerminals/start, make explicit fields into implicit fields, derived from productions

fix terminals getter: ignore the String in Names of nonTerminals

fix nonTerminals getter: ignore constructor Names

(both fixed by the newtypes)

use lenses
biplate is a Traversal'