35 votes

Utilisation du type Maybe dans Haskell

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.

39voto

Martijn Points 3955

Alternativement, vous pouvez faire correspondre les motifs:

 case maybeValue of
  Just value -> ...
  Nothing    -> ...
 

20voto

arsenm Points 1834

Vous pouvez utiliser les Données.Peut-être.fromMaybe, qui prend Peut-être une et une valeur à utiliser si il n'en est Rien. Vous pouvez utiliser de l'insécurité de Données.Peut-être.fromJust, qui va simplement se bloquer si la valeur n'est Rien. Il est probable que vous voulez garder les choses dans la monade Peut-être. Si vous voulez ajouter un entier à un peut-être, vous pourriez faire quelque chose comme

import Control.Applicative

f x = (+x) <$> Just 4

qui est le même que f x = fmap (+x) (Seulement 4)

f 3 sera alors Just 7. (Vous pouvez continuer à la chaîne de calculs supplémentaires de cette manière.)

8voto

Dario Points 26259

Juste comme remarque: puisque Maybe est un Monad , vous pouvez construire des calculs en utilisant do -notation ...

 sumOfThree :: Maybe Int
sumOfThree = do
  a <- someMaybeNumber
  b <- someMaybeNumber
  c <- someMaybeNumber
  let k = 42 -- Just for fun
  return (a + b + c + k)
 

8voto

LennyStackOverflow Points 1020

Exemples pour "peut-être":

 > maybe 0 (+ 42) Nothing
0
> maybe 0 (+ 42) (Just 12)
54
 

4voto

vikingsteve Points 6357

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
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X