# Updates for String-related GHC proposals

**URL:** <https://discourse.haskell.org/t/updates-for-string-related-ghc-proposals/13160>\
**Category:** Uncategorized\
**Created:** [October 22, 2025, 5:01am UTC](https://discourse.haskell.org/t/updates-for-string-related-ghc-proposals/13160 "2025-10-22T05:01:34Z")\
**Posts on this page:** 1\
**Showing post:** 27

<div class="post-metadata">

**Author:** ![brandonchinn178](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/brandonchinn178/32/5103_2.png) [@brandonchinn178](https://discourse.haskell.org/u/brandonchinn178)\
**Post date:** [October 27, 2025, 1:37am UTC](https://discourse.haskell.org/t/updates-for-string-related-ghc-proposals/13160/27 "2025-10-27T01:37:12Z")

</div>

`Builder.interpolateString` would have total control over its definition, so facetiously, you could implement it however you want 🙂 :

1. Avoid any implicit conversions, force any interpolations to have type `Builder` by setting `convert = id`
2. Implement your own `Builder.Interpolate` class (with a new set of instances)
3. Reuse the existing `interpolateS` function in the provided `Interpolate` class and set `convert = Builder.fromShowS . interpolateS` (assuming `Builder.fromShowS` fuses correctly)

The “Builder” section in the Appendix of the proposal might be of note to you, but I could augment it if some of these details would be helpful in there.

@rhendric Two different things - if you have just StringInterpolation set, you can use `s"..."` only for String. If you have StringInterpolation + OverloadedStrings, all `s"..."` exprs will add fromString invocations. If you have StringInterpolation + QualifiedStrings, you’d separately have access to `M.s"..."`, however `M` defines interpolateString.

> [@rhendric](#):
>
> If interpolation goes through `String`, it isn’t really allowing overloading in the same way that `OverloadedStrings` does.

I don’t understand this. It’s still overloading in the sense that everything gets coerced to `IsString s` after initially going through String (either the literal or via `interpolate`). And in practice, wouldn’t most implementations of `interpolate` for Text be `T.pack $ ...`? While I appreciate the conceptual “it’d be nice to not go through String at all in the first place”, I don’t see a practical benefit for the majority of simple string interpolation use cases.

---

_[View the full topic](https://discourse.haskell.org/t/updates-for-string-related-ghc-proposals/13160)._
