A possible compromise regarding type-piracy is to make it optional: exports a functions with a different name and provide an option to commit type-piracy.
This is what I have done in ThreadedSparseCSR.jl: [ANN] Announcing ThreadedSparseCSR.jl
By default the package exports functions tmul
and bmul
which provide an aternative to mul
and *
. If one wishes to do so, the package provides the option to do type-piracy by overwriting mul
and *
by tmul
or bmul