So gibt es eine Bibliothek in Haskell spoon genannt, die mir diesesIst der Löffel in Haskell unsicher?
safeHead :: [a] -> Maybe a
safeHead = spoon . head
können tun, aber es lässt mich dieses
>>> spoon True :: Maybe Bool
Just True
>>> spoon (error "fork") :: Maybe Bool
Nothing
>>> spoon undefined :: Maybe Bool
Nothing
>>> spoon (let x = x in x) :: Maybe Bool
<... let's just keep waiting...>
auch tun, die in bestimmten Fällen sehr nützlich scheint, aber es verstößt auch gegen denotational Semantik (zu meinem Verständnis), da es mir erlaubt, zwischen verschiedenen Dingen im semantischen Urbild von ⊥
zu unterscheiden. Dies ist strikt leistungsfähiger als throw
/catch
, da sie wahrscheinlich eine durch Fortsetzungen definierte Semantik haben.
Also meine Frage ist: Kann jemand Löffel böswillig verwenden, um Typ Sicherheit zu brechen? Ist die Bequemlichkeit die Gefahr wert? Oder, realistischer gesehen, gibt es einen vernünftigen Weg, mit dessen Hilfe jemand das Vertrauen in die Bedeutung eines Programms verlieren könnte?
Von welcher Gefahr sprechen Sie? Dass ein Purist vor dem Horror zurückschrecken könnte? –
gute Frage, scheint wie das könnte wirklich nützlich sein. –
@RobertHarvey Es ist keine Gefahr, aber oft finden Sie, dass Verletzungen der Reinheit zu falschen Erwartungen über Verhalten oder Tricks führen, um Modulkapselung zu umgehen.Ich wäre mehr als glücklich, 'Löffel' in echtem Code zu verwenden (was ich bereits tue), aber ich habe heute bemerkt, dass es die Haskell-Semantik verletzt. –