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