OverloadedStrings
扩展确实非常有用,但是它有一些缺点。考虑以下函数定义:
someFunction :: ToJSSTring a => a -> IO ()
someFunction = js_function . toJSSTring
在这种情况下,如果我想传递一个文字值,我必须在OverloadedStrings
启用时显式添加类型签名:
someFunction ("This is plain string" :: String)
someFunction ("And this one is Text" :: Data.Text.Text)
这种必要性的原因很明显,我想OverloadedStrings
旨在简化将文字值传递给具有严格类型签名的函数,从而使开发人员无需在需要值pack
的任何地方编写 s 。Text
问题是有什么方法可以将所有没有类型签名的字符串文字默认为Text
, 或String
? 或者我应该将我的代码拆分为通用函数(具有ToJSString
类型约束)和任意函数,它们的参数具有严格的类型签名?