The current re-sugaring is ad-hoc and we can improve it for example, given
let f (x:obj) (y:obj) = x |> string
Before this fix the following expression decompilation
<@ 2 |> f "2" @> |> decompile
would be
"2 |> let x = "2" in fun y -> f x y"
due to coercion throwing off our pattern matching. But after this fix we'll have
"2 |> f "2""