On Saturday, November 29, 2014 5:57:57 AM UTC+10, Zenna Tavares wrote:
>
> In a probabilistic programming package I am working on, I have a
> RandVarSymbolic{T} type.
> The following promotion rules (should) state basically that a type T and
> and a RandVarSymbolic parameterised on that T should promote to the
> RandVarSymbolic{T}.
> In the special case when I have different types but they are both subtypes
> of Real, I want to promote these subtypes first.
>
> promote_rule{T<:Real}(::Type{T}, ::Type{RandVarSymbolic{T}}) =
> RandVarSymbolic{T}
> promote_rule{T}(::Type{T}, ::Type{RandVarSymbolic{T}}) = RandVarSymbolic{T
> }
> promote_rule{T1<:Real, T2<:Real}(::Type{T1}, ::Type{RandVarSymbolic{T2}})
> =
> RandVarSymbolic{promote_type(T1,T2)}
>
>
> I get the warning
>
> Warning: New definition
> promote_rule(Type{T1<:Real},Type{RandVarSymbolic{T2<:Real}}) at
> /home/zenna/.julia/v0.3/Sigma/src/randvar/randvarsymbolic.jl:50
> is ambiguous with:
> promote_rule(Type{T},Type{RandVarSymbolic{T}}) at
> /home/zenna/.julia/v0.3/Sigma/src/randvar/randvarsymbolic.jl:42.
> To fix, define
> promote_rule(Type{_<:Real},Type{RandVarSymbolic{_<:Real}})
> before the new definition.
>
IIUC "before" is the key.
Cheers
Lex
>
> The error makes sense, except I believe I have accounted for this with the
> first rule - the types for the method the warning is asking me to specify
> are the same as what I wrote.
>
> Any idea of what's going on here?
>
> Zenna
>