.
refactor: Monadic parsec to Applicative parsec
parsing commands: manually, with parsec
type alias Parser
parseMixFix/parseU1/parseRaw

parseC :: Constructor -> [Syntax]

   data Command
    = Xreplace_with_ Phrase Phrase -- ^ by 'parseMixFix'
    | Undo                         -- ^ by 'parseU1'
    | Repeat Command               -- ^ by 'parseRaw'

derives:

   [ [ Part "replace"
     , Hole (ConT Commands.Syntax.Phrase)
     , Part "with"
     , Hole (ConT Commands.Syntax.Phrase)]
   , [Part "Undo"]
   , [Hole (ConT Commands.Syntax.Command)]
   ]
refactor: lenses + plates
.
Generic Default, first constructor
clean: hlint, rename, add top types,
refactor: magic prop_ / case_ (test-framework-th)
.
the Objective-C bindings are (way) fast enough
.
(some lines moved to Commands.Parse / Commands.TH)
build Grammar from template!

See 'Commands.TH.pProduction'

e.g.

    [rule| data Command
    ReplaceWith  replace Phrase with Phrase
    Click        Times Button click
    Undo         undo
    |]

->

    Production ''Command [
     Variant ''ReplaceWith  [Part "replace", Hole ''Phrase, Part "with", Hole ''Phrase],
     Variant ''Click        [Hole ''Times, Hole ''Button, Part "click"],
     Variant ''Undo         [Part "undo"]]
.
build "data" from Grammar!

See 'Commands.TH.buildDataD'

> Production ''Command [
>  Variant ''ReplaceWith  [Part "replace", Hole ''Phrase, Part "with", Hole ''Phrase],
>  Variant ''Click        [Hole ''Times, Hole ''Button, Part "click"],
>  Variant ''Undo         [Part "undo"]]

  ->

> data Command
>  = ReplaceWith  Phrase Phrase
>  | Click        Times Button
>  | Undo
>  deriving (Show,Eq)
Generic Default. 'def' = the first constructor

>>> import Command.Generic
>>> import Generics.Deriving
>>> :set -XDeriveGeneric
>>> :set -XDefaultSignatures
>>>
>>> data Bool = False | True deriving Show
>>> instance Default Bool
>>> (def :: Bool)
False
>>>
>>> :kind! Rep Bool