Peut-être en utilisant le type de Haskell
Question
Je suis en train d'utiliser le type Peut-être dans Haskell. J'ai une recherche pour tuples clé, valeur qui retourne un Maybe. Comment puis-je accéder aux données qui ont été enveloppées par peut-être? Par exemple, je veux ajouter l'entier contenu par un autre entier avec peut-être.
La solution
Sinon, vous pouvez correspondance de motif:
case maybeValue of
Just value -> ...
Nothing -> ...
Autres conseils
Vous pouvez utiliser Data.Maybe.fromMaybe
, qui prend Maybe a
et une valeur à utiliser si elle est Nothing
. Vous pouvez utiliser le Data.Maybe.fromJust
dangereux, qui vient planter si la valeur est Nothing
. Vous voulez probablement garder les choses en Maybe
. Si vous voulez ajouter un entier dans un Maybe
, vous pouvez faire quelque chose comme
f x = (+x) <$> Just 4
qui est la même que
f x = fmap (+x) (Just 4)
f 3
sera alors Just 7
. (Vous pouvez continuer à la chaîne des calculs supplémentaires de cette manière.)
Tout comme une note de côté: Depuis Maybe
est un Monad
, vous pouvez construire des calculs en utilisant la notation do
-...
sumOfThree :: Maybe Int
sumOfThree = do
a <- someMaybeNumber
b <- someMaybeNumber
c <- someMaybeNumber
let k = 42 -- Just for fun
return (a + b + c + k)
Exemples pour "peut-être":
> maybe 0 (+ 42) Nothing
0
> maybe 0 (+ 42) (Just 12)
54
Beaucoup de gens sont contre l'utilisation de fromJust
, mais il peut être pratique si vous êtes au courant de ce qui se passera lorsque la recherche échoue (erreur !!)
Tout d'abord, vous aurez besoin:
import Data.Maybe
Et puis votre recherche à partir d'une liste de tuples ressemblera à ceci
Data.Maybe.fromJust $ lookup key listOfTuples
Par exemple, la recherche réussie:
Data.Maybe.fromJust $ lookup "a" [("a",1),("b",2),("c",3)]
1
Et les regards d'échec horribles comme ceci:
Data.Maybe.fromJust $ lookup "z" [("a",1),("b",2),("c",3)]
*** Exception: Maybe.fromJust: Nothing
Désolé, je googled mieux.
en utilisant la fonction fromMaybe est exactement ce que je dois. fromMaybe retourne la valeur Peut-être que si elle est rien, sinon elle retournera une valeur par défaut fournie à fromMaybe.
http : //www.haskell.org/ghc/docs/6.12.2/html/libraries/base-4.2.0.1/Data-Maybe.html