%
-% (c) The GRASP/AQUA Project, Glasgow University, 1992-1996
+% (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
%
\section[Maybes]{The `Maybe' types and associated utility functions}
\begin{code}
module Maybes (
--- Maybe(..), -- no, it's in 1.3
+ Maybe2(..), Maybe3(..),
MaybeErr(..),
+ orElse,
mapMaybe,
allMaybes,
firstJust,
#include "HsVersions.h"
import Maybe( catMaybes, mapMaybe )
+
+
+infixr 4 `orElse`
+\end{code}
+
+
+%************************************************************************
+%* *
+\subsection[Maybe2,3 types]{The @Maybe2@ and @Maybe3@ types}
+%* *
+%************************************************************************
+
+\begin{code}
+data Maybe2 a b = Just2 a b | Nothing2 deriving (Eq,Show)
+data Maybe3 a b c = Just3 a b c | Nothing3 deriving (Eq,Show)
\end{code}
failMaybe :: Maybe a
failMaybe = Nothing
+
+orElse :: Maybe a -> a -> a
+(Just x) `orElse` y = x
+Nothing `orElse` y = y
\end{code}
Lookup functions
failMaB :: err -> MaybeErr val err
failMaB e = Failed e
\end{code}
+