1 % -----------------------------------------------------------------------------
2 % $Id: Maybe.lhs,v 1.5 2000/06/30 13:39:35 simonmar Exp $
4 % (c) The University of Glasgow, 1994-2000
7 \section[Maybe]{Module @Maybe@}
9 The standard Haskell 1.3 library for working with
13 {-# OPTIONS -fno-implicit-prelude #-}
18 -- instance of: Eq, Ord, Show, Read,
19 -- Functor, Monad, MonadPlus
21 , maybe -- :: b -> (a -> b) -> Maybe a -> b
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]
32 -- Implementation checked wrt. Haskell 98 lib report, 1/99.
36 import PrelErr ( error )
44 %*********************************************************
46 \subsection{Functions}
48 %*********************************************************
51 isJust :: Maybe a -> Bool
52 isJust Nothing = False
55 isNothing :: Maybe a -> Bool
56 isNothing Nothing = True
59 fromJust :: Maybe a -> a
60 fromJust Nothing = error "Maybe.fromJust: Nothing" -- yuck
63 fromMaybe :: a -> Maybe a -> a
64 fromMaybe d x = case x of {Nothing -> d;Just v -> v}
66 maybeToList :: Maybe a -> [a]
67 maybeToList Nothing = []
68 maybeToList (Just x) = [x]
70 listToMaybe :: [a] -> Maybe a
71 listToMaybe [] = Nothing
72 listToMaybe (a:_) = Just a
74 catMaybes :: [Maybe a] -> [a]
75 catMaybes ls = [x | Just x <- ls]
77 mapMaybe :: (a -> Maybe b) -> [a] -> [b]
80 let rs = mapMaybe f xs in