tl; dr: import Data.Text (replace)
- se riesci a convivere con la firma del tipo più limitato?
1) Il modulo Data.String.Utils
non è codificata come sicuro, anche se dovrebbe essere.
2) Il modulo Data.String.Utils
è sicuro. È sbagliato chiamarlo "non sicuro", anche se si mettono le virgolette in "sicurezza". GHC ti dice che il modulo non sarebbe sicuro, perché usa un approccio conservativo: se non può dimostrare al momento della compilazione che il modulo è sicuro, si presume che non sia sicuro. Ma non importa quanto il compilatore si lamenta del fatto che il modulo non sia sicuro, rimane comunque perfettamente al sicuro.
3) D'altra parte, sarebbe possibile scrivere un modulo, esportare alcune versioni di unsafePerformIO
e contrassegnarlo come "Affidabile". GHC penserebbe che il modulo possa essere importato in sicurezza. Ma in effetti, il modulo è intrinsecamente pericoloso.
Quindi, quali sono le opzioni ora?
A) Scaricate il sorgente del pacchetto, e modificare i moduli di cui avete bisogno, e per i quali si sa che sono sicuri, ad includere un tag "Trustworthy" all'inizio: {-# LANGUAGE Trustworthy #-}
(È può inviare una patch al manutentore, oppure puoi tenerlo per te)
B) Scrivi la tua versione di replace
e contrassegnala come sicura.
C) Forse è possibile utilizzare replace
da Data.Text
. Ma questo è limitato a Text
, mentre l'altra funzione replace
funziona su elenchi arbitrari.
Almeno su Hoogle non ci sono altri metodi con una firma [a] -> [a] -> [a] -> [a]
per il vostro caso d'uso.
intendi, non è etichettato come "sicuro" - la funzione è perfettamente sicura - puoi creare una patch e inviarla al maintainer, probabilmente sarà felice di includerla. – Michael
@Michael: Esattamente quello che dice nei documenti collegati: '{- # LANGUAGE Safe # -}' fallisce con un avviso che 'Data.String.Utils non può essere importato in sicurezza! Il modulo non è sicuro. – orome
@raxacoricofallapatorius Ecco cosa sta dicendo Michael. Se fosse etichettato come sicuro, questo non accadrebbe. –