Ich versuche, den Maybe-Typ in Haskell zu verwenden. Ich suche nach Schlüsseln, Werttupeln, die ein Maybe zurückgeben. Wie greife ich auf die Daten zu, die von Maybe verpackt wurden? Zum Beispiel möchte ich die von Maybe enthaltene Ganzzahl mit einer anderen Ganzzahl ergänzen.Using Vielleicht geben Sie Haskell ein
Antwort
Sorry, ich hätte besser googeln sollen.
mit der Funktion fromMaybe ist genau das, was ich brauche. fromMaybe gibt den Wert in Maybe zurück, wenn es nicht nichts ist, andernfalls wird ein Standardwert von fromMaybe zurückgegeben.
http://www.haskell.org/ghc/docs/6.12.2/html/libraries/base-4.2.0.1/Data-Maybe.html
Ja, aber stellen Sie sicher, dass das das Verhalten ist, das Sie wollen, denn wenn Sie zum Beispiel eine Maybe Int verwenden und dann jedes Mal, wenn es nichts ist, geben Sie Null zurück, dann sollten Sie haben habe einfach von Anfang an einen einfachen alten Int benutzt. Vielleicht soll es helfen, die Abwesenheit eines Ergebnisses oder Wertes zu kodieren und nicht wirklich umgangen zu werden. Persönlich versuche ich so wenig wie möglich von der myBear Funktion zu steuern. –
könnten Sie Data.Maybe.fromMaybe
verwenden, die einen Maybe a
und einen Wert annimmt, zu verwenden, wenn es Nothing
ist. Sie könnten das unsichere Data.Maybe.fromJust
verwenden, das nur abstürzen wird, wenn der Wert Nothing
ist. Sie möchten wahrscheinlich Dinge in Maybe
behalten. Wenn Sie eine ganze Zahl in einem Maybe
hinzufügen möchten, können Sie so etwas wie
f x = (+x) <$> Just 4
tun, die die gleiche wie
istf x = fmap (+x) (Just 4)
f 3
dann Just 7
sein wird. (Sie können auf diese Weise an die Kette zusätzliche Berechnungen fortzusetzen.)
nur als Randnotiz: Da Maybe
ein Monad
ist, können Sie bauen Berechnungen mit do
-Notation ...
sumOfThree :: Maybe Int
sumOfThree = do
a <- someMaybeNumber
b <- someMaybeNumber
c <- someMaybeNumber
let k = 42 -- Just for fun
return (a + b + c + k)
Beispiele für "vielleicht":
> maybe 0 (+ 42) Nothing
0
> maybe 0 (+ 42) (Just 12)
54
Viele Menschen sind gegen den Einsatz von fromJust
, aber es zweckmäßig sein kann, wenn Sie wissen, was passieren wird, wenn die Suche fehlschlägt (Fehler !!)
Zum einen müssen Sie dies:
import Data.Maybe
Und dann Nachschlag aus einer Liste von Tupeln wie diese
Data.Maybe.fromJust $ lookup key listOfTuples
Zum Beispiel erfolgreicher Lookup aussehen:
Data.Maybe.fromJust $ lookup "a" [("a",1),("b",2),("c",3)]
1
Und schreckliche Versagen sieht wie folgt aus:
Data.Maybe.fromJust $ lookup "z" [("a",1),("b",2),("c",3)]
*** Exception: Maybe.fromJust: Nothing
Dies ist eine doppelte: http://stackoverflow.com/questions/3375483/operating-on-a-return-from-a-maybe-that -contains-nur/3375712 # 3375712 –