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