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?