demoSyntax :: Syntax s => s [[Char]]
demoSyntax = many syntaxAB where
    syntaxAB = cons <$> syntaxA <*> (cons <$> syntaxB <*> (nil <$> pure ()))
    syntaxA = onlyChar 'a' <$> token
    syntaxB = onlyChar 'b' <$> token

----------------------------------------------------------------------------------------------------
-- Parser

---- Simple parser / pp from read / show
--mkInvertible :: forall a. (Read a, Show a) => Iso String a
--mkInvertible = iso readMaybe (return . show)
demoSyntax :: Syntax s => s [[Char]]
demoSyntax = many syntaxAB where
    syntaxAB = cons <$> syntaxA <*> (cons <$> syntaxB <*> (nil <$> pure ()))
    syntaxA = onlyChar 'a' <$> token
    syntaxB = onlyChar 'b' <$> token

----------------------------------------------------------------------------------------------------
-- Parser

---- Simple parser / pp from read / show
--mkInvertible :: forall a. (Read a, Show a) => Iso String a
--mkInvertible = iso readMaybe (return . show)
demoSyntax = many syntaxAB where
    syntaxAB = cons <$> syntaxA <*> (cons <$> syntaxB <*> (nil <$> pure ()))
    syntaxA = onlyChar 'a' <$> token
    syntaxB = onlyChar 'b' <$> token

----------------------------------------------------------------------------------------------------
-- Parser

---- Simple parser / pp from read / show
--mkInvertible :: forall a. (Read a, Show a) => Iso String a
--mkInvertible = iso readMaybe (return . show)