| ZVON > References > Haskell reference |
| Intro / Search / ZVON |
| | Indexes | Syntax | Prelude | Ratio | Complex | Numeric | Ix | Array | List | >> Maybe << | Char | Monad | IO | Directory | System | Time | Locale | CPUTime | Random |
The type constructor Maybe is defined in Prelude as
data Maybe a = Nothing | Just a
The purpose of the Maybe type is to provide a method of dealing with illegal or optional values without terminating the program, as would happen if error were used, and without using IOError from the IO monad, which would cause the expression to become monadic. A correct result is encapsulated by wrapping it in Just; an incorrect result is returned as Nothing.
Other operations on Maybe are provided as part of the monadic classes in the Prelude.
module Maybe(
isJust, isNothing,
fromJust, fromMaybe, listToMaybe, maybeToList,
catMaybes, mapMaybe,
-- ...and what the Prelude exports
Maybe(Nothing, Just),
maybe
) where
isJust :: Maybe a -> Bool
isJust (Just a) = True
isJust Nothing = False
isNothing :: Maybe a -> Bool
isNothing = not . isJust
fromJust :: Maybe a -> a
fromJust (Just a) = a
fromJust Nothing = error "Maybe.fromJust: Nothing"
fromMaybe :: a -> Maybe a -> a
fromMaybe d Nothing = d
fromMaybe d (Just a) = a
maybeToList :: Maybe a -> [a]
maybeToList Nothing = []
maybeToList (Just a) = [a]
listToMaybe :: [a] -> Maybe a
listToMaybe [] = Nothing
listToMaybe (a:_) = Just a
catMaybes :: [Maybe a] -> [a]
catMaybes ms = [ m | Just m <- ms ]
mapMaybe :: (a -> Maybe b) -> [a] -> [b]
mapMaybe f = catMaybes . map f