Fazer cleaning do código atual (CORE 0.0.0) fazendo as transformações com base em monads para facilitar a mudança de estado o flow de dados, error handling e etc.
ParserMonad - Unificar Lexing, Parsing e Layout numa Monad só
TransformationMonad - Monad para as transformações em geral - um state monad específico
Error handling - erros tem tipo e conteudo. Erros são cumulativos e podem ou não ser bloqueantes. Dentro da monad um processo pode decidir se quer continuar o processamento ou não dependendo dos erros já registrados por processos anteriores (para isso, erros são guardados e podem ser procurados).
Logs são cumulativos assim como os erros mas não são erros em si. São apenas logs para debug ou algo do gênero (ex: "Entrando na função tal")
Estado - será possível pegar e setar o estado. O estado da transformation monad pode ser arbitráriamente grande, dependendo da complexidade.
Dentro da monad também existirá um estado auxiliar, que será também modificado por funções específicas porém não é ideal fazer o get e set dessas variáveis auxiliares (elas são "automaticamente" setadas pela monad).
Gerenciamento de nomes (de funções, componentes, sinais e etc) e de ID's (que devem ser únicos).
Pode guardar informações sobre funções como arity, tipo de função (recursiva ou não, etc) - óbvio
Cleaning geral do código - pegando todos os erros, todos bugs e deixando o código mais geral e expansível o possível.
Criação de um formalismo para nomenclatura de funções, módulos, transformações e etc.
Fazer cleaning do código atual (CORE 0.0.0) fazendo as transformações com base em monads para facilitar a mudança de estado o flow de dados, error handling e etc.