Ich kann nicht als "Sicher" Code, der zum Beispiel
enthält %Vor% weil (anscheinend) Data.String.Utils
ist nicht "sicher".
Gibt es eine sichere Alternative zu replace
? Und warum ist replace
trotzdem sicher?
tl; dr: import Data.Text (replace)
- Wenn Sie mit der eingeschränkteren Signatur leben können?
1) Das Data.String.Utils
-Modul ist nicht als sicher gekennzeichnet, obwohl es sein sollte.
2) Das Modul Data.String.Utils
ist sicher. Es ist falsch, es als "nicht sicher" zu bezeichnen, selbst wenn man die Anführungszeichen "sicher" nennt. GHC teilt Ihnen mit, dass das Modul unsicher ist, da es einen konservativen Ansatz verwendet: Wenn es zur Kompilierungszeit nicht beweisen kann, dass das Modul sicher ist, geht es davon aus, dass es unsicher ist. Aber egal, wie laut der Compiler beschwert, dass das Modul unsicher wäre, es bleibt trotzdem absolut sicher.
3) Auf der anderen Seite wäre es möglich, ein Modul zu schreiben, eine Version von unsafePerformIO
zu exportieren und als "Trustworthy" zu markieren. GHC würde denken, dass das Modul sicher importiert werden kann. Aber in der Tat ist das Modul von Natur aus unsicher.
Welche Optionen haben Sie jetzt?
A) Laden Sie die Quelle des Pakets herunter und ändern Sie die Module, die Sie benötigen und für die Sie sicher sind, dass sie ein "Trustworthy" -Tag am Anfang enthalten: {-# LANGUAGE Trustworthy #-}
(Sie können einen Patch an den Betreuer senden, oder Sie behalten ihn für sich)
B) Sie schreiben Ihre eigene Version von replace
und markieren sie als sicher.
C) Vielleicht können Sie replace
von Data.Text
verwenden. Dies ist jedoch auf Text
beschränkt, während die andere Funktion replace
auf beliebigen Listen arbeitet.
Mindestens auf Hoogle gibt es keine anderen Methoden mit einer [a] -> [a] -> [a] -> [a]
-Signatur für Ihren Anwendungsfall.
Tags und Links haskell