This is much simpler, at the cost of an allocation.
For cases where we end up building an array of Diracs only to later take a product, we should look for ways to think ahead, so we can jump straight to this second representation. In this case we can often avoid the allocation.
I don't think there's a need to have a single canonical form for this. We can instead add some methods to deal with ProductMeasure{<:AbstractArray{<:Dirac}} and take advantage of this structure.
Currently, a product of
Dirac
s works like this:In some cases, we might prefer to write this as
This is much simpler, at the cost of an allocation.
For cases where we end up building an array of
Dirac
s only to later take a product, we should look for ways to think ahead, so we can jump straight to this second representation. In this case we can often avoid the allocation.I don't think there's a need to have a single canonical form for this. We can instead add some methods to deal with
ProductMeasure{<:AbstractArray{<:Dirac}}
and take advantage of this structure.