You don't need to anything about the compiler internals to know that a String is a linked list, and that concatenating a linked list is expensive, and that ShowS is a function interface that enables optimized contatenation.
Data structures are useless without functions, and functions are useless without data structures. In use, ropes are like `ShowS`. It feels to me like you're making a grammatical distinction, of a kind I try to avoid so I can think more abstractly. Our categories are historical accident.
Rope is a data structure, not a function.
https://hackage.haskell.org/package/base-4.19.1.0/docs/GHC-S...
https://hackage.haskell.org/package/base-4.19.1.0/docs/Data-...