J'essaie d'utiliser le type Maybe dans Haskell. J'ai une recherche de clé, de tuples de valeur qui renvoie un peut-être. Comment accéder aux données qui ont été encapsulées par Maybe? Par exemple, je veux ajouter l'entier contenu par Peut-être avec un autre entier.
Alternativement, vous pouvez faire correspondre les motifs:
case maybeValue of
Just value -> ...
Nothing -> ...
Vous pouvez utiliser Data.Maybe.fromMaybe
, qui prend un Maybe a
et une valeur à utiliser si elle est Nothing
. Vous pouvez utiliser le dangereux Data.Maybe.fromJust
, qui plantera juste si la valeur est Nothing
. Vous voudrez probablement garder les choses dans Maybe
. Si vous vouliez ajouter un entier dans un Maybe
, vous pourriez faire quelque chose comme
f x = (+x) <$> Just 4
ce qui est le même que
f x = fmap (+x) (Just 4)
f 3
sera alors Just 7
. (Vous pouvez continuer à enchaîner des calculs supplémentaires de cette manière.)
Exemples pour "peut-être":
> maybe 0 (+ 42) Nothing
0
> maybe 0 (+ 42) (Just 12)
54
Juste comme note latérale: Puisque 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)
Désolé, j'aurais dû mieux googler.
utiliser la fonction fromMaybe est exactement ce dont j'ai besoin. fromMaybe renverra la valeur dans Maybe si ce n'est pas rien, sinon il renverra 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
Beaucoup de gens sont contre l'utilisation de fromJust
, mais cela peut être pratique si vous savez ce qui se passera lorsque la recherche échoue (erreur !!)
Tout d'abord, vous en 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, recherche réussie:
Data.Maybe.fromJust $ lookup "a" [("a",1),("b",2),("c",3)]
1
Et un échec horrible ressemble à ceci:
Data.Maybe.fromJust $ lookup "z" [("a",1),("b",2),("c",3)]
*** Exception: Maybe.fromJust: Nothing