It might be possible, but I think it's better to separate them out because it makes type-checking easier and makes storing and retrieving the value more sensible. For a generic `LiteralExpression` we would have to store the value either as an Object or a String, and then cast it to the appropriate type whenever it would be used. The separation I have now ensures that the `BooleanLiteral` only cares about storing a boolean, the `IntegerLiteral` only ever stores an integer, etc.