# Function name conflict: ADL / function merging?

**URL:** <https://discourse.julialang.org/t/function-name-conflict-adl-function-merging/10335>\
**Category:** Internals & Design\
**Tags:** proposal, namespaces\
**Created:** [April 14, 2018, 5:16pm UTC](https://discourse.julialang.org/t/function-name-conflict-adl-function-merging/10335 "2018-04-14T17:16:17Z")\
**Posts on this page:** 1\
**Showing post:** 200

<div class="post-metadata">

**Author:** ![jeff.bezanson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jeff.bezanson/32/48_2.png) [@jeff.bezanson](https://discourse.julialang.org/u/jeff.bezanson)\
**Post date:** [April 20, 2018, 8:56pm UTC](https://discourse.julialang.org/t/function-name-conflict-adl-function-merging/10335/200 "2018-04-20T20:56:38Z")

</div>

> [@jlperla](#):
>
> It even makes it practical to write code without any using Base

Ok, I finally understand this. It took me a while, because this C++ approach is so completely at odds with the lisp worldview. The lisp view of `f(x, y)` is that first `f`, `x`, and `y` are _evaluated_. In fact they can each be arbitrary expressions and don’t have to be names/symbols. Then the _object_ resulting from evaluating `f` is used to do a call. That object always does the same thing no matter how you got it. E.g. `f(x, y)` can be rewritten to

```julia
stuff = [f]
stuff[1](x, y)

```

Now, it’s possible that `f` could be an object that implements a form of ADL over its arguments. But it’s these objects that would populate the “single global namespace” of function names — there has to be some namespace that maps the name `f` to an object that does what you want, and you have to be able to see that binding.

---

_[View the full topic](https://discourse.julialang.org/t/function-name-conflict-adl-function-merging/10335)._
