A type for SExpressions (And an abstract base class instead of an interface), and an isEqual function