def is_value? o
      return true if [true , false ,  nil].include?(o)
      return true if [::Integer, Symbol, String, Class].include?(o.class)
      if o.respond_to? :is_value?
        return true if o.is_value?
      end
      return false
    end
def is_value? o
      return true if [true , false ,  nil].include?(o)
      return true if [::Integer, Symbol, String, Class].include?(o.class)
      if o.respond_to? :is_value?
        return true if o.is_value?
      end
      return false
    end
"value" is a property meaning simple/ not further structure
 hence int/bool/string etc are values