@ChrisRackauckas That’s exactly what brought this up. I had code like this:

```
L = Mul(A,B) # lazy multiplication
x = randn(5)
L*x
```

where `L*x`

is implemented via `materialize(Mul(A,B,x))`

in a style meant to mimic `Broadcasted`

. The only way this makes sense (without completely destroying the point of lazy multiplication) is for `L*x`

to be `A*(B*x)`

, but then I realised its inconsistent with Base’s `*(A,B,x)`

.

The story gets a bit more complicated because now I also have ContinuumArrays.jl, where `A`

, `B`

are subtypes of `AbstractQuasiMatrix`

, and I’ve implemented `*(A,B,C)`

with this types by calling `materialize(Mul(A,B,C))`

.

Using a different notation for `*`

might be the way to go, though many cases we have things like `B'D'D*B`

for weak Laplacians so it’s nice to be able to write this using shorthand.