<div dir="ltr">Hi all,<div><br></div><div>There are multiple string types in Haskell – String, lazy/strict ByteString, lazy/strict Text to name a few. So to make a string handling function maximally reusable, it needs to support multiple string types.</div><div><br></div><div>One approach used by TagSoup library is to make a type class StringLike which represents the polymorphic string type and uses it where a String type is normally needed. For example,</div><div><br></div><div>parseTags :: StringLike str => str -> [Tag str]<br></div><div><br></div><div>Here parseTags takes a StringLike type instead of a fixed string type. Users of TagSoup can pick any of String, lazy/strict ByteString, lazy/strict Text because they are all instances of StringLike type class.</div><div><br></div><div>It seems StringLike type class is quite generic but it is used only in the TagSoup package. This makes me wonder what is the idiomatic way to support multiple string types in Haskell. What other approaches do we have?</div><div><br></div><div>Thanks,</div><div>Kwang Yul Seo</div><div><br></div></div>