Creating a symbolic differentiator to learn about recursive data types, making my own ADT, lexing and parsing