[project @ 1999-01-14 18:12:47 by sof]
[ghc-hetmet.git] / ghc / lib / std / Maybe.lhs
1 %
2 % (c) The AQUA Project, Glasgow University, 1994-1999
3 %
4 \section[Maybe]{Module @Maybe@}
5
6 The standard Haskell 1.3 library for working with
7 @Maybe@ values.
8
9 \begin{code}
10 {-# OPTIONS -fno-implicit-prelude #-}
11
12 module Maybe
13    (
14      Maybe(Nothing,Just)
15                         -- instance of: Eq, Ord, Show, Read,
16                         --              Functor, Monad, MonadPlus
17
18    , maybe              -- :: b -> (a -> b) -> Maybe a -> b
19
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]
28
29      -- Implementation checked wrt. Haskell 98 lib report, 1/99.
30    ) where
31
32 import PrelErr  ( error )
33 import PrelList
34 import PrelMaybe
35 import PrelBase
36 \end{code}
37
38
39 %*********************************************************
40 %*                                                      *
41 \subsection{Functions}
42 %*                                                      *
43 %*********************************************************
44
45 \begin{code}
46 isJust         :: Maybe a -> Bool
47 isJust Nothing = False
48 isJust _       = True
49
50 isNothing         :: Maybe a -> Bool
51 isNothing Nothing = True
52 isNothing _       = False
53
54 fromJust          :: Maybe a -> a
55 fromJust Nothing  = error "Maybe.fromJust: Nothing" -- yuck
56 fromJust (Just x) = x
57
58 fromMaybe     :: a -> Maybe a -> a
59 fromMaybe d x = case x of {Nothing -> d;Just v  -> v}
60
61 maybeToList            :: Maybe a -> [a]
62 maybeToList  Nothing   = []
63 maybeToList  (Just x)  = [x]
64
65 listToMaybe           :: [a] -> Maybe a
66 listToMaybe []        =  Nothing
67 listToMaybe (a:_)     =  Just a
68  
69 catMaybes              :: [Maybe a] -> [a]
70 catMaybes ls = [x | Just x <- ls]
71
72 mapMaybe          :: (a -> Maybe b) -> [a] -> [b]
73 mapMaybe _ []     = []
74 mapMaybe f (x:xs) =
75  let rs = mapMaybe f xs in
76  case f x of
77   Nothing -> rs
78   Just r  -> r:rs
79
80 \end{code}
81