2 % (c) The AQUA Project, Glasgow University, 1994-1999
4 \section[Maybe]{Module @Maybe@}
6 The standard Haskell 1.3 library for working with
10 {-# OPTIONS -fno-implicit-prelude #-}
15 -- instance of: Eq, Ord, Show, Read,
16 -- Functor, Monad, MonadPlus
18 , maybe -- :: b -> (a -> b) -> Maybe a -> b
20 , isJust -- :: Maybe a -> Bool
21 , isNothing -- :: Maybe a -> Bool
22 , fromJust -- :: Maybe a -> a
23 , fromMaybe -- :: a -> Maybe a -> a
24 , listToMaybe -- :: [a] -> Maybe a
25 , maybeToList -- :: Maybe a -> [a]
26 , catMaybes -- :: [Maybe a] -> [a]
27 , mapMaybe -- :: (a -> Maybe b) -> [a] -> [b]
29 -- Implementation checked wrt. Haskell 98 lib report, 1/99.
33 import PrelErr ( error )
41 %*********************************************************
43 \subsection{Functions}
45 %*********************************************************
48 isJust :: Maybe a -> Bool
49 isJust Nothing = False
52 isNothing :: Maybe a -> Bool
53 isNothing Nothing = True
56 fromJust :: Maybe a -> a
57 fromJust Nothing = error "Maybe.fromJust: Nothing" -- yuck
60 fromMaybe :: a -> Maybe a -> a
61 fromMaybe d x = case x of {Nothing -> d;Just v -> v}
63 maybeToList :: Maybe a -> [a]
64 maybeToList Nothing = []
65 maybeToList (Just x) = [x]
67 listToMaybe :: [a] -> Maybe a
68 listToMaybe [] = Nothing
69 listToMaybe (a:_) = Just a
71 catMaybes :: [Maybe a] -> [a]
72 catMaybes ls = [x | Just x <- ls]
74 mapMaybe :: (a -> Maybe b) -> [a] -> [b]
77 let rs = mapMaybe f xs in