OverloadedStrings
Erweiterung ist wirklich sehr nützlich, aber es hat einige Nachteile. Betrachten Sie die folgende Funktionsdefinition:Verwenden überladener Strings
someFunction :: ToJSSTring a => a -> IO()
someFunction = js_function . toJSSTring
In diesem Fall, wenn, wenn ich einen literalen Wert übergeben will Ich habe eine Art Signatur explizit hinzufügen, wenn OverloadedStrings
aktiviert ist:
someFunction ("This is plain string" :: String)
someFunction ("And this one is Text" :: Data.Text.Text)
Der Grund dafür Notwendigkeit ist ziemlich offensichtlich, ich nehme an, OverloadedStrings
wurde entwickelt, um die Weitergabe von Literalwerten zu Funktionen, die strenge Typ-Signaturen zu erleichtern, so dass der Entwickler frei von Schreiben pack
s überall, wo ein Text
Wert benötigt wird.
Die Frage ist, gibt es eine Möglichkeit, sagen wir, alle String-Literale ohne Typ Signaturen Text
oder String
Standard? Oder sollte ich meinen Code nur in allgemeine Funktionen (mit der ToJSString
Typ-Einschränkung) und in beliebige andere, die für ihre Argumente strikte Typ-Signaturen haben, aufteilen?
Sie hört nie auf, mich zu überraschen! Danke vielmals. –