While programming language interpreter. Not very elegant right now and trying to improve it using GADT