class Dentaku::AST::Arithmetic

def value(context = {})

def value(context = {})
  l = cast(left.value(context))
  r = cast(right.value(context))
  begin
    l.public_send(operator, r)
  rescue ::TypeError => e
    # Right cannot be converted to a suitable type for left. e.g. [] + 1
    raise Dentaku::ArgumentError.for(:incompatible_type, value: r, for: l.class), e.message
  end
end