I have some Elixir code like this:
def generate_and_process_foo() do
foo = generate_foo() |> transform_foo()
process_foo(foo)
foo
end
The process_foo() function performs side-effects, but I do not care about its return value. I want generate_and_process_foo() to return foo rather than the return value of process_foo().
I'd ideally like to refactor this code to place it all in a pipeline, while preserving my return value. I can do this:
def generate_and_process_foo() do
generate_foo()
|> transform_foo()
|> (fn foo -> process_foo(foo); foo end).()
end
But that feels worse that the original version.
I'd ideally like to do something like this:
def generate_and_process_foo() do
generate_foo()
|> transform_foo()
|> Function.side_effect(&process_foo/1)
end
Does anything like that exist? Or some trick I'm missing?