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.

È stato utile?

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

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top