Piping module attributes

I picked this pattern up from another dev and have made fairly extensive use of it with Multis:

   @multi Multi.new()
   ...
   @multi
   |> Multi.put(:params, params)
   |> Multi.run(:somefunc, &some_func/2

This ensures that pipechains start with a raw value and, I think, it looks a little cleaner. Does anybdy else do this? Are there any articles on this pattern? It’s fairly simple but there is some nuance due to the constraints of module attributes (I’ve only done it with Ecto.Multi.new/2 and raw values), I wonder if you would run into problems during compile time if you tried it with modules in your project. Of course you couldn’t do it with a function in the same module.