Why do we need different classes for the different types of literals? Do you think it would be possible to implement a single `LiteralExpression` that encapsulates the functionality of all cases?