https://github.com/JuliaLang/julia/issues/18419
--Tim On Wednesday, September 7, 2016 12:59:05 AM CDT Lutfullah Tomak wrote: > A reduced case that also makes multiplication of the same Irrational an > error. > > _ > _ _ _(_)_ | A fresh approach to technical computing > (_) | (_) (_) | Documentation: http://docs.julialang.org > _ _ _| |_ __ _ | Type "?help" for help. > > | | | | | | |/ _` | | > | | | > | | |_| | | | (_| | | Version 0.5.0-rc3+0 (2016-08-22 23:43 UTC) > > _/ |\__'_|_|_|\__'_| | > > |__/ | x86_64-linux-gnu > > julia> module Erratic > > > const DummyUnion = Union{Irrational,AbstractFloat} > abstract DummyReal <: Real > immutable DummyType <: DummyReal > var::DummyUnion > end > > > mulSym(x::DummyUnion, y::DummyUnion) = x*y > mulSym(x::DummyUnion, y::DummyType) = DummyType(mulSym(x, y.var > )) > > > import Base.* > *(x::DummyUnion, y::DummyReal) = mulSym(x, y) > > > end > Erratic > > > julia> pi*pi > ERROR: * not defined for Irrational{:π} > in error(::String, ::String, ::Vararg{Any,N}) at ./error.jl:22 > in no_op_err(::String, ::Type{T}) at ./promotion.jl:254 > in *(::Irrational{:π}, ::Irrational{:π}) at ./promotion.jl:256 > in eval(::Module, ::Any) at ./boot.jl:234 > > > julia> pi*Erratic.DummyType(pi) > ERROR: * not defined for Irrational{:π} > in error(::String, ::String, ::Vararg{Any,N}) at ./error.jl:22 > in no_op_err(::String, ::Type{T}) at ./promotion.jl:254 > in *(::Irrational{:π}, ::Irrational{:π}) at ./promotion.jl:256 > in mulSym(::Irrational{:π}, ::Irrational{:π}) at ./REPL[1]:9 > in mulSym(::Irrational{:π}, ::Erratic.DummyType) at ./REPL[1]:10 > in *(::Irrational{:π}, ::Erratic.DummyType) at ./REPL[1]:13 > in eval(::Module, ::Any) at ./boot.jl:234 > > > julia> pi*Erratic.DummyType(2.) > Erratic.DummyType(6.283185307179586) > > DummyReal does not cover Irrationals but it somehow triggers default > *{T<:Number}(x::T, y::T) = no_op_err("*", T) > What kind of number does not have multiplication defined with itself?