Utilizzando Forse digitare in Haskell
Domanda
Sto cercando di utilizzare il Forse digitare in Haskell. Ho una ricerca per le tuple chiave, valore che restituisce un forse. Come faccio ad accedere ai dati che è stato avvolto dalla Forse? Ad esempio voglio aggiungere l'intero contenuto da Magari con un altro intero.
Soluzione
In alternativa è possibile pattern match:
case maybeValue of
Just value -> ...
Nothing -> ...
Altri suggerimenti
Si potrebbe utilizzare Data.Maybe.fromMaybe
, che prende un Maybe a
e un valore da utilizzare se è Nothing
. È possibile utilizzare il Data.Maybe.fromJust
non sicuro, che sarà solo in crash se il valore è Nothing
. È probabile che desidera mantenere le cose in Maybe
. Se si vuole aggiungere un intero in un Maybe
, si potrebbe fare qualcosa di simile
f x = (+x) <$> Just 4
, che è lo stesso di
f x = fmap (+x) (Just 4)
f 3
sarà quindi Just 7
. (È possibile continuare a catena calcoli aggiuntivi in ??questo modo.)
Proprio come una nota a margine: Dal momento che è un Maybe
Monad
, si può costruire calcoli utilizzando do
notazione ...
sumOfThree :: Maybe Int
sumOfThree = do
a <- someMaybeNumber
b <- someMaybeNumber
c <- someMaybeNumber
let k = 42 -- Just for fun
return (a + b + c + k)
Esempi di "forse":
> maybe 0 (+ 42) Nothing
0
> maybe 0 (+ 42) (Just 12)
54
Molte persone sono contro l'uso di fromJust
, ma può essere conveniente se si è a conoscenza di ciò che accadrà quando la ricerca ha esito negativo (errore !!)
In primo luogo avrete bisogno di questo:
import Data.Maybe
E poi il tuo codice in una lista di tuple sarà simile a questa ??p>
Data.Maybe.fromJust $ lookup key listOfTuples
Ad esempio, la ricerca di successo:
Data.Maybe.fromJust $ lookup "a" [("a",1),("b",2),("c",3)]
1
e orribile aspetto fallimento come questo:
Data.Maybe.fromJust $ lookup "z" [("a",1),("b",2),("c",3)]
*** Exception: Maybe.fromJust: Nothing
Siamo spiacenti, avrei dovuto googled migliore.
utilizzando la funzione di fromMaybe è esattamente quello che mi serve. fromMaybe restituirà il valore in forse se non è nulla, in caso contrario verrà restituito un valore predefinito fornito al fromMaybe.
http : //www.haskell.org/ghc/docs/6.12.2/html/libraries/base-4.2.0.1/Data-Maybe.html