OverloadedStrings
extension is really very useful, however it has some downsides.
Consider the following function definition:
someFunction :: ToJSSTring a => a -> IO ()
someFunction = js_function . toJSSTring
In this case when if I want to pass a literal value I have to add a type signature explicitly when OverloadedStrings
is enabled:
someFunction ("This is plain string" :: String)
someFunction ("And this one is Text" :: Data.Text.Text)
The reason for this necessity is quite obvious, I suppose OverloadedStrings
was designed to ease the passing of literal values to functions that have strict type signatures, making the developer free from writing pack
s everywhere where a Text
value is needed.
The question is there any way, say, to default all string literals without type signatures to Text
, or String
? Or should I just split my code to general functions (with the ToJSString
type constraint) and arbitrary ones, which have strict type signatures for their arguments?