Miscellaneous things I didn't mention
Important - You and the compiler generate specializations
foo(a, b) = a * b + 2
Will be fully specialized on input arguments when called.
It won't appear in methods
though.
-(A::AbstractArray{T}, b::Date) where {T<:Date}
will cause ambiguities with:
-(A::MyArrayType{T}, b::T) where {T}
Type piracy shall not be abided (well maybe a little sometimes)
module A
import Base.*
*(x::Symbol, y::Symbol) = Symbol(x,y)
end
Hopefully you've got some high level semantics of the language down.
I want to emphasize something I sort of alluded to, but maybe didn't say super explicitly:
Important - Separating Functions and Data implies multiple dispatch