OverloadedStrings
estensione è davvero molto utile, tuttavia presenta alcuni aspetti negativi. Si consideri la seguente definizione di funzione:Utilizzo di stringhe di overloading
someFunction :: ToJSSTring a => a -> IO()
someFunction = js_function . toJSSTring
In questo caso, quando se voglio passare un valore letterale devo aggiungere una firma tipo in modo esplicito quando OverloadedStrings
è abilitato:
someFunction ("This is plain string" :: String)
someFunction ("And this one is Text" :: Data.Text.Text)
La ragione di questo la necessità è abbastanza ovvia, suppongo che lo OverloadedStrings
sia stato progettato per facilitare il passaggio di valori letterali a funzioni che hanno stringhe di testo severe, rendendo lo sviluppatore libero dalla scrittura di pack
s ovunque sia necessario un valore Text
.
La domanda esiste in ogni modo, ad esempio, per predefinire tutti i valori letterali stringa senza le firme di tipo su Text
o String
? O dovrei semplicemente dividere il mio codice in funzioni generali (con il vincolo di tipo ToJSString
) e arbitrarie, che hanno stringhe di testo severe per i loro argomenti?
Non smetti mai di stupirmi! Molte grazie. –