This would work a lot better as a class with methods. Then we could ensure that the default value is always Bottom, we could have nice conversions to and from boolean, and things like the leastUpperBound function could be a member function with a nicer name.