I do not think this is a GHC specific issue. Naively, once you define and use a free monad as an algebraic data type, performance degrades to the extent that you retain freedom in how it is interpreted. I see this as just one example of the general principle that the less dynamism you have in the interpretation, in other words the more that is decided at compile time, the better the performance gets.
In essence, improving the performance of an effect system is about gaining performance by restricting dynamism, and moreover about improving the API’s UX so that users can choose how that restriction is applied.