10
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
被設計成可以簡化將字面值傳遞給具有嚴格類型簽名的函數,從而使開發人員無需在需要Text
值的地方編寫pack
。
問題是否有任何方式,比如默認所有沒有輸入簽名的字符串到Text
或String
?或者我應該將我的代碼分割爲一般函數(類型約束爲ToJSString
)和任意函數,它們的參數都有嚴格的類型簽名?
你永遠不會驚歎我!非常感謝。 – 2014-11-06 14:08:05