When rendering tags |> join(', '), join(', ') would be evaluated first. Next the tags would be passed into whatever join(', ') returns, which is expected to be a function that excepts a single argument.
Essentially this gets transformed (logically at least) into join(', ')(tags), which is equivalent to join(', ', tags).