Gibt es eine "sichere" Alternative, die das Ersetzen von Data.String.Utils in Haskell ersetzt?

9

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?

    
orome 21.09.2015, 17:51
quelle

1 Antwort

1

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.

    
Michael 21.09.2015 18:42
quelle

Tags und Links