[project @ 1998-12-02 13:17:09 by simonm]
[ghc-hetmet.git] / ghc / interpreter / library / Maybe.hs
1 #ifdef HEAD
2 module Maybe(
3     isJust, fromJust, fromMaybe, listToMaybe, maybeToList,
4     catMaybes, mapMaybe, unfoldr ) where
5 import PreludeBuiltin
6 #endif /* HEAD */
7 #ifdef BODY
8
9 isJust                 :: Maybe a -> Bool
10 isJust (Just a)        =  True
11 isJust Nothing         =  False
12
13 fromJust               :: Maybe a -> a
14 fromJust (Just a)      =  a
15 fromJust Nothing       =  error "Maybe.fromJust: Nothing"
16
17 fromMaybe              :: a -> Maybe a -> a
18 fromMaybe d Nothing    =  d
19 fromMaybe d (Just a)   =  a
20
21 maybeToList            :: Maybe a -> [a]
22 maybeToList Nothing    =  []
23 maybeToList (Just a)   =  [a]
24
25 listToMaybe            :: [a] -> Maybe a
26 listToMaybe []         =  Nothing
27 listToMaybe (a:_)      =  Just a
28  
29 catMaybes              :: [Maybe a] -> [a]
30 catMaybes ms           =  [ m | Just m <- ms ]
31
32 mapMaybe               :: (a -> Maybe b) -> [a] -> [b]
33 mapMaybe f             =  catMaybes . map f
34
35 unfoldr                :: ([a] -> Maybe ([a], a)) -> [a] -> ([a],[a])
36 unfoldr f x =
37   case f x of
38   Just (x',y) -> let (ys,x'') = unfoldr f x' in (x'',y:ys)
39   Nothing     -> (x,[])
40
41 #endif /* BODY */