# Is @which lying to me?

**URL:** https://discourse.julialang.org/t/is-which-lying-to-me/22097
**Category:** General Usage
**Created:** [March 20, 2019, 9:59am UTC](https://discourse.julialang.org/t/is-which-lying-to-me/22097 "2019-03-20T09:59:55Z")
**Posts on this page:** 4
**Page:** 1

<div class="post-metadata">

### Author: ![anon67531922](https://avatars.discourse-cdn.com/v4/letter/a/48db29/32.png) [@anon67531922](https://discourse.julialang.org/u/anon67531922)
#### Post date: [March 20, 2019, 9:59am UTC](https://discourse.julialang.org/t/is-which-lying-to-me/22097/1 "2019-03-20T09:59:55Z")

</div>

MWE:

```julia
julia> struct MyNumber
       value::Float64
       end

julia> Base.:^(x::MyNumber,n::Int) = MyNumber(x.value^n)

julia> @which x^-1
^(x::MyNumber, n::Int64) in Main at REPL[2]:1

julia> x = MyNumber(rand())
MyNumber(0.9658905866711973)

julia> x^-1
ERROR: MethodError: no method matching inv(::MyNumber)
Closest candidates are:
  inv(::Complex{Float64}) at complex.jl:431
  inv(::BigFloat) at mpfr.jl:471
  inv(::Integer) at int.jl:56

```

It should not be calling `inv(::MyNumber)`, right?

---

<div class="post-metadata">

### Author: ![kristoffer.carlsson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kristoffer.carlsson/32/22_2.png) [@kristoffer.carlsson](https://discourse.julialang.org/u/kristoffer.carlsson)
#### Post date: [March 20, 2019, 10:02am UTC](https://discourse.julialang.org/t/is-which-lying-to-me/22097/2 "2019-03-20T10:02:30Z")

</div>

Yes. [`@which` and `@code_warntype` don't show `^Val{p}` lowering · Issue #21014 · JuliaLang/julia · GitHub](https://github.com/JuliaLang/julia/issues/21014)

---

<div class="post-metadata">

### Author: ![anon67531922](https://avatars.discourse-cdn.com/v4/letter/a/48db29/32.png) [@anon67531922](https://discourse.julialang.org/u/anon67531922)
#### Post date: [March 20, 2019, 10:06am UTC](https://discourse.julialang.org/t/is-which-lying-to-me/22097/3 "2019-03-20T10:06:19Z")

</div>

Thanks 🙌

The solution is not clear to me though. Should I overload `inv` and define `^` in terms of `inv`? 🤔

---

<div class="post-metadata">

### Author: ![kristoffer.carlsson](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/kristoffer.carlsson/32/22_2.png) [@kristoffer.carlsson](https://discourse.julialang.org/u/kristoffer.carlsson)
#### Post date: [March 20, 2019, 10:54am UTC](https://discourse.julialang.org/t/is-which-lying-to-me/22097/4 "2019-03-20T10:54:28Z")

</div>

Add  
`Base.inv(x::MyNumber) = MyNumber(inv(x.value))`
