It doesn’t work because ModA.length and ModB.length are two different functions and ModA.foo calls ModA.length. To extend ModA.length in ModB instead of creating a new function ModB.length, you need to qualify it or import it explicitly, i.e., either
import ..ModA
function ModA.length(x::Bar)
return 42
end
or
import ..ModA: length
function length(x::Bar)
return 42
end
Edit: The table in this section of the manual shows what is brought into scope and what functions are made available to extend by using/import.