haskell maybe

Usando Maybe escriba en Haskell



(6)

Alternativamente, puedes emparejar patrones:

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

Estoy tratando de utilizar el tipo Maybe en Haskell. Tengo una búsqueda de clave, tuplas de valor que devuelve un Tal vez. ¿Cómo accedo a los datos que fue envuelto por Maybe? Por ejemplo, quiero agregar el entero contenido por Maybe con otro entero.


Ejemplos de "tal vez":

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



Muchas personas están en contra del uso de fromJust , sin embargo, puede ser conveniente si eres consciente de lo que sucederá cuando la búsqueda falle (¡error!)

Primero, necesitarás esto:

import Data.Maybe

Y luego su búsqueda de una lista de tuplas se verá así:

Data.Maybe.fromJust $ lookup key listOfTuples

Por ejemplo, búsqueda exitosa:

Data.Maybe.fromJust $ lookup "a" [("a",1),("b",2),("c",3)] 1

Y una falla horrible se ve así:

Data.Maybe.fromJust $ lookup "z" [("a",1),("b",2),("c",3)] *** Exception: Maybe.fromJust: Nothing


Podría usar Data.Maybe.fromMaybe , que toma un Maybe a y un valor para usar si es Nothing . Podría usar el Data.Maybe.fromJust inseguro, que simplemente se bloqueará si el valor es Nothing . Es probable que desee mantener las cosas en Maybe . Si quisiera agregar un número entero en un Maybe , podría hacer algo como

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

que es lo mismo que

f x = fmap (+x) (Just 4)

f 3 será entonces Just 7 . (Puede continuar encadenando cómputos adicionales de esta manera).


Solo como una nota al margen: ya que Maybe es una Monad , puedes construir cálculos usando do -notation ...

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