data Exp constructors can't be infix because need 4 arguments