471 lines
24 KiB
HTML
471 lines
24 KiB
HTML
<?xml version="1.0" encoding="iso-8859-1" ?>
|
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
<!--http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd-->
|
|
<html xmlns="http://www.w3.org/1999/xhtml"
|
|
>
|
|
<head><title>21 Data.Maybe</title>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
|
<meta name="generator" content="TeX4ht (http://www.cse.ohio-state.edu/~gurari/TeX4ht/)" />
|
|
<meta name="originator" content="TeX4ht (http://www.cse.ohio-state.edu/~gurari/TeX4ht/)" />
|
|
<!-- 2,html,xhtml -->
|
|
<meta name="src" content="haskell.tex" />
|
|
<meta name="date" content="2010-07-20 13:11:00" />
|
|
<link rel="stylesheet" type="text/css" href="haskell.css" />
|
|
</head><body
|
|
>
|
|
<!--l. 1--><div class="crosslinks"><p class="noindent">[<a
|
|
href="haskellch22.html" >next</a>] [<a
|
|
href="haskellch20.html" >prev</a>] [<a
|
|
href="haskellch20.html#tailhaskellch20.html" >prev-tail</a>] [<a
|
|
href="#tailhaskellch21.html">tail</a>] [<a
|
|
href="haskellpa2.html#haskellch21.html" >up</a>] </p></div>
|
|
<h2 class="chapterHead"><span class="titlemark">Chapter 21</span><br /><a
|
|
id="x29-25500021"></a><span
|
|
class="pcrr7t-">Data.Maybe</span></h2>
|
|
<div class="quote">
|
|
|
|
|
|
|
|
<div class="verbatim" id="verbatim-432">
|
|
module Data.Maybe (
|
|
 <br />    Maybe(Nothing, Just),  maybe,  isJust,  isNothing,  fromJust,  fromMaybe,
|
|
 <br />    listToMaybe,  maybeToList,  catMaybes,  mapMaybe
|
|
 <br />  ) where
|
|
</div>
|
|
<p class="noindent"></div>
|
|
<h3 class="sectionHead"><span class="titlemark">21.1 </span> <a
|
|
id="x29-25600021.1"></a>The <span
|
|
class="pcrr7t-">Maybe </span>type and operations </h3>
|
|
<p class="noindent">
|
|
<dl> <dt class="haddockdesc">
|
|
<!--tex4ht:inline--><div class="tabular"> <table id="TBL-362" class="tabular"
|
|
cellspacing="0" cellpadding="0" rules="groups"
|
|
><colgroup id="TBL-362-1g"><col
|
|
id="TBL-362-1" /></colgroup><tr
|
|
style="vertical-align:baseline;" id="TBL-362-1-"><td style="white-space:nowrap; text-align:left;" id="TBL-362-1-1"
|
|
class="td11"><span
|
|
class="pcrb7t-">data</span><span
|
|
class="pcrb7t-"> Maybe</span><span
|
|
class="pcrb7t-"> a </span></td>
|
|
</tr></table> </div> <dd class="haddockdesc">
|
|
<!--tex4ht:inline--><div class="tabular"><table id="TBL-363" class="tabulary"
|
|
cellspacing="0" cellpadding="0"
|
|
><colgroup id="TBL-363-1g"><col
|
|
id="TBL-363-1" /><col
|
|
id="TBL-363-2" /><col
|
|
id="TBL-363-3" /></colgroup><tr
|
|
style="vertical-align:baseline;" id="TBL-363-1-"><td style="white-space:nowrap; text-align:left;" id="TBL-363-1-1"
|
|
class="td11"> <span
|
|
class="pcrb7t-">= </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-363-1-2"
|
|
class="td11"> <span
|
|
class="pcrb7t-">Nothing </span></td><td style="white-space:wrap; text-align:left;" id="TBL-363-1-3"
|
|
class="td11"> </td>
|
|
</tr><tr
|
|
style="vertical-align:baseline;" id="TBL-363-2-"><td style="white-space:nowrap; text-align:left;" id="TBL-363-2-1"
|
|
class="td11"> <span
|
|
class="pcrb7t-">| </span></td><td style="white-space:nowrap; text-align:left;" id="TBL-363-2-2"
|
|
class="td11"> <span
|
|
class="pcrb7t-">Just a </span></td><td style="white-space:wrap; text-align:left;" id="TBL-363-2-3"
|
|
class="td11"> </td>
|
|
</tr><tr
|
|
style="vertical-align:baseline;" id="TBL-363-3-"><td style="white-space:nowrap; text-align:left;" id="TBL-363-3-1"
|
|
class="td11"> </td></tr></table>
|
|
</div>
|
|
<p class="noindent"> The <span
|
|
class="pcrr7t-">Maybe</span><a
|
|
id="dx29-256001"></a> type encapsulates an optional value. A value of type <span
|
|
class="pcrr7t-">Maybe</span><span
|
|
class="pcrr7t-"> a </span>either contains a value of
|
|
type <span
|
|
class="pcrr7t-">a </span>(represented as <span
|
|
class="pcrr7t-">Just</span><span
|
|
class="pcrr7t-"> a</span>), or it is empty (represented as <span
|
|
class="pcrr7t-">Nothing</span><a
|
|
id="dx29-256002"></a>). Using <span
|
|
class="pcrr7t-">Maybe</span><a
|
|
id="dx29-256003"></a> is a
|
|
good way to deal with errors or exceptional cases without resorting to drastic measures such as
|
|
<span
|
|
class="pcrr7t-">error</span><a
|
|
id="dx29-256004"></a>.
|
|
<p class="noindent"> The <span
|
|
class="pcrr7t-">Maybe</span><a
|
|
id="dx29-256005"></a> type is also a monad. It is a simple kind of error monad, where all errors are represented by
|
|
<span
|
|
class="pcrr7t-">Nothing</span><a
|
|
id="dx29-256006"></a>. A richer error monad can be built using the <span
|
|
class="pcrr7t-">Data.Either.Either </span>type.
|
|
</dl>
|
|
<p class="noindent">
|
|
<dl> <dt class="haddockdesc">
|
|
<!--tex4ht:inline--><div class="tabular"> <table id="TBL-364" class="tabular"
|
|
cellspacing="0" cellpadding="0" rules="groups"
|
|
><colgroup id="TBL-364-1g"><col
|
|
id="TBL-364-1" /></colgroup><tr
|
|
style="vertical-align:baseline;" id="TBL-364-1-"><td style="white-space:nowrap; text-align:left;" id="TBL-364-1-1"
|
|
class="td11"><span
|
|
class="pcrb7t-">instance</span><span
|
|
class="pcrb7t-"> Monad</span><span
|
|
class="pcrb7t-"> Maybe </span></td>
|
|
</tr><tr
|
|
style="vertical-align:baseline;" id="TBL-364-2-"><td style="white-space:nowrap; text-align:left;" id="TBL-364-2-1"
|
|
class="td11"><span
|
|
class="pcrb7t-">instance</span><span
|
|
class="pcrb7t-"> Functor</span><span
|
|
class="pcrb7t-"> Maybe </span></td>
|
|
</tr><tr
|
|
style="vertical-align:baseline;" id="TBL-364-3-"><td style="white-space:nowrap; text-align:left;" id="TBL-364-3-1"
|
|
class="td11"><span
|
|
class="pcrb7t-">instance</span><span
|
|
class="pcrb7t-"> MonadPlus</span><span
|
|
class="pcrb7t-"> Maybe </span></td>
|
|
</tr><tr
|
|
style="vertical-align:baseline;" id="TBL-364-4-"><td style="white-space:nowrap; text-align:left;" id="TBL-364-4-1"
|
|
class="td11"><span
|
|
class="pcrb7t-">instance</span><span
|
|
class="pcrb7t-"> Eq</span><span
|
|
class="pcrb7t-"> a</span><span
|
|
class="pcrb7t-"> =></span><span
|
|
class="pcrb7t-"> Eq</span><span
|
|
class="pcrb7t-"> (Maybe</span><span
|
|
class="pcrb7t-"> a) </span></td>
|
|
</tr><tr
|
|
style="vertical-align:baseline;" id="TBL-364-5-"><td style="white-space:nowrap; text-align:left;" id="TBL-364-5-1"
|
|
class="td11"><span
|
|
class="pcrb7t-">instance</span><span
|
|
class="pcrb7t-"> Ord</span><span
|
|
class="pcrb7t-"> a</span><span
|
|
class="pcrb7t-"> =></span><span
|
|
class="pcrb7t-"> Ord</span><span
|
|
class="pcrb7t-"> (Maybe</span><span
|
|
class="pcrb7t-"> a) </span></td>
|
|
</tr><tr
|
|
style="vertical-align:baseline;" id="TBL-364-6-"><td style="white-space:nowrap; text-align:left;" id="TBL-364-6-1"
|
|
class="td11"><span
|
|
class="pcrb7t-">instance</span><span
|
|
class="pcrb7t-"> Read</span><span
|
|
class="pcrb7t-"> a</span><span
|
|
class="pcrb7t-"> =></span><span
|
|
class="pcrb7t-"> Read</span><span
|
|
class="pcrb7t-"> (Maybe</span><span
|
|
class="pcrb7t-"> a) </span></td>
|
|
</tr><tr
|
|
style="vertical-align:baseline;" id="TBL-364-7-"><td style="white-space:nowrap; text-align:left;" id="TBL-364-7-1"
|
|
class="td11"><span
|
|
class="pcrb7t-">instance</span><span
|
|
class="pcrb7t-"> Show</span><span
|
|
class="pcrb7t-"> a</span><span
|
|
class="pcrb7t-"> =></span><span
|
|
class="pcrb7t-"> Show</span><span
|
|
class="pcrb7t-"> (Maybe</span><span
|
|
class="pcrb7t-"> a) </span></td>
|
|
</tr></table> </div> <dd class="haddockdesc">
|
|
</dl>
|
|
<p class="noindent">
|
|
<dl><dt class="haddockdesc">
|
|
<!--tex4ht:inline--><div class="tabular"> <table id="TBL-365" class="tabular"
|
|
cellspacing="0" cellpadding="0" rules="groups"
|
|
><colgroup id="TBL-365-1g"><col
|
|
id="TBL-365-1" /></colgroup><tr
|
|
style="vertical-align:baseline;" id="TBL-365-1-"><td style="white-space:nowrap; text-align:left;" id="TBL-365-1-1"
|
|
class="td11"><span
|
|
class="pcrb7t-">maybe</span><span
|
|
class="pcrb7t-"> ::</span><span
|
|
class="pcrb7t-"> b</span><span
|
|
class="pcrb7t-"> -></span><span
|
|
class="pcrb7t-"> (a</span><span
|
|
class="pcrb7t-"> -></span><span
|
|
class="pcrb7t-"> b)</span><span
|
|
class="pcrb7t-"> -></span><span
|
|
class="pcrb7t-"> Maybe</span><span
|
|
class="pcrb7t-"> a</span><span
|
|
class="pcrb7t-"> -></span><span
|
|
class="pcrb7t-"> b </span></td>
|
|
</tr></table> </div> <dd class="haddockdesc">
|
|
The <span
|
|
class="pcrr7t-">maybe</span><a
|
|
id="dx29-256007"></a> function takes a default value, a function, and a <span
|
|
class="pcrr7t-">Maybe</span><a
|
|
id="dx29-256008"></a> value. If the <span
|
|
class="pcrr7t-">Maybe</span><a
|
|
id="dx29-256009"></a> value is
|
|
<span
|
|
class="pcrr7t-">Nothing</span><a
|
|
id="dx29-256010"></a>, the function returns the default value. Otherwise, it applies the function to the value inside
|
|
the <span
|
|
class="pcrr7t-">Just</span><a
|
|
id="dx29-256011"></a> and returns the result.
|
|
</dl>
|
|
|
|
|
|
|
|
<p class="noindent">
|
|
<dl> <dt class="haddockdesc">
|
|
<!--tex4ht:inline--><div class="tabular"> <table id="TBL-366" class="tabular"
|
|
cellspacing="0" cellpadding="0" rules="groups"
|
|
><colgroup id="TBL-366-1g"><col
|
|
id="TBL-366-1" /></colgroup><tr
|
|
style="vertical-align:baseline;" id="TBL-366-1-"><td style="white-space:nowrap; text-align:left;" id="TBL-366-1-1"
|
|
class="td11"><span
|
|
class="pcrb7t-">isJust</span><span
|
|
class="pcrb7t-"> ::</span><span
|
|
class="pcrb7t-"> Maybe</span><span
|
|
class="pcrb7t-"> a</span><span
|
|
class="pcrb7t-"> -></span><span
|
|
class="pcrb7t-"> Bool </span></td>
|
|
</tr></table> </div> <dd class="haddockdesc">
|
|
The <span
|
|
class="pcrr7t-">isJust</span><a
|
|
id="dx29-256012"></a> function returns <span
|
|
class="pcrr7t-">True</span><a
|
|
id="dx29-256013"></a> iff its argument is of the form <span
|
|
class="pcrr7t-">Just</span><span
|
|
class="pcrr7t-"> _</span>.
|
|
</dl>
|
|
<p class="noindent">
|
|
<dl> <dt class="haddockdesc">
|
|
<!--tex4ht:inline--><div class="tabular"> <table id="TBL-367" class="tabular"
|
|
cellspacing="0" cellpadding="0" rules="groups"
|
|
><colgroup id="TBL-367-1g"><col
|
|
id="TBL-367-1" /></colgroup><tr
|
|
style="vertical-align:baseline;" id="TBL-367-1-"><td style="white-space:nowrap; text-align:left;" id="TBL-367-1-1"
|
|
class="td11"><span
|
|
class="pcrb7t-">isNothing</span><span
|
|
class="pcrb7t-"> ::</span><span
|
|
class="pcrb7t-"> Maybe</span><span
|
|
class="pcrb7t-"> a</span><span
|
|
class="pcrb7t-"> -></span><span
|
|
class="pcrb7t-"> Bool </span></td>
|
|
</tr></table> </div> <dd class="haddockdesc">
|
|
The <span
|
|
class="pcrr7t-">isNothing</span><a
|
|
id="dx29-256014"></a> function returns <span
|
|
class="pcrr7t-">True</span><a
|
|
id="dx29-256015"></a> iff its argument is <span
|
|
class="pcrr7t-">Nothing</span><a
|
|
id="dx29-256016"></a>.
|
|
</dl>
|
|
<p class="noindent">
|
|
<dl> <dt class="haddockdesc">
|
|
<!--tex4ht:inline--><div class="tabular"> <table id="TBL-368" class="tabular"
|
|
cellspacing="0" cellpadding="0" rules="groups"
|
|
><colgroup id="TBL-368-1g"><col
|
|
id="TBL-368-1" /></colgroup><tr
|
|
style="vertical-align:baseline;" id="TBL-368-1-"><td style="white-space:nowrap; text-align:left;" id="TBL-368-1-1"
|
|
class="td11"><span
|
|
class="pcrb7t-">fromJust</span><span
|
|
class="pcrb7t-"> ::</span><span
|
|
class="pcrb7t-"> Maybe</span><span
|
|
class="pcrb7t-"> a</span><span
|
|
class="pcrb7t-"> -></span><span
|
|
class="pcrb7t-"> a </span></td>
|
|
</tr></table> </div> <dd class="haddockdesc">
|
|
The <span
|
|
class="pcrr7t-">fromJust</span><a
|
|
id="dx29-256017"></a> function extracts the element out of a <span
|
|
class="pcrr7t-">Just</span><a
|
|
id="dx29-256018"></a> and throws an error if its argument is
|
|
<span
|
|
class="pcrr7t-">Nothing</span><a
|
|
id="dx29-256019"></a>.
|
|
</dl>
|
|
<p class="noindent">
|
|
<dl> <dt class="haddockdesc">
|
|
<!--tex4ht:inline--><div class="tabular"> <table id="TBL-369" class="tabular"
|
|
cellspacing="0" cellpadding="0" rules="groups"
|
|
><colgroup id="TBL-369-1g"><col
|
|
id="TBL-369-1" /></colgroup><tr
|
|
style="vertical-align:baseline;" id="TBL-369-1-"><td style="white-space:nowrap; text-align:left;" id="TBL-369-1-1"
|
|
class="td11"><span
|
|
class="pcrb7t-">fromMaybe</span><span
|
|
class="pcrb7t-"> ::</span><span
|
|
class="pcrb7t-"> a</span><span
|
|
class="pcrb7t-"> -></span><span
|
|
class="pcrb7t-"> Maybe</span><span
|
|
class="pcrb7t-"> a</span><span
|
|
class="pcrb7t-"> -></span><span
|
|
class="pcrb7t-"> a </span></td>
|
|
</tr></table> </div> <dd class="haddockdesc">
|
|
The <span
|
|
class="pcrr7t-">fromMaybe</span><a
|
|
id="dx29-256020"></a> function takes a default value and and <span
|
|
class="pcrr7t-">Maybe</span><a
|
|
id="dx29-256021"></a> value. If the <span
|
|
class="pcrr7t-">Maybe</span><a
|
|
id="dx29-256022"></a> is <span
|
|
class="pcrr7t-">Nothing</span><a
|
|
id="dx29-256023"></a>, it
|
|
returns the default values; otherwise, it returns the value contained in the <span
|
|
class="pcrr7t-">Maybe</span><a
|
|
id="dx29-256024"></a>.
|
|
</dl>
|
|
<p class="noindent">
|
|
<dl> <dt class="haddockdesc">
|
|
<!--tex4ht:inline--><div class="tabular"> <table id="TBL-370" class="tabular"
|
|
cellspacing="0" cellpadding="0" rules="groups"
|
|
><colgroup id="TBL-370-1g"><col
|
|
id="TBL-370-1" /></colgroup><tr
|
|
style="vertical-align:baseline;" id="TBL-370-1-"><td style="white-space:nowrap; text-align:left;" id="TBL-370-1-1"
|
|
class="td11"><span
|
|
class="pcrb7t-">listToMaybe</span><span
|
|
class="pcrb7t-"> ::</span><span
|
|
class="pcrb7t-"> [a]</span><span
|
|
class="pcrb7t-"> -></span><span
|
|
class="pcrb7t-"> Maybe</span><span
|
|
class="pcrb7t-"> a </span></td>
|
|
</tr></table> </div> <dd class="haddockdesc">
|
|
The <span
|
|
class="pcrr7t-">listToMaybe</span><a
|
|
id="dx29-256025"></a> function returns <span
|
|
class="pcrr7t-">Nothing</span><a
|
|
id="dx29-256026"></a> on an empty list or <span
|
|
class="pcrr7t-">Just</span><span
|
|
class="pcrr7t-"> a </span>where <span
|
|
class="pcrr7t-">a </span>is the first
|
|
element of the list.
|
|
</dl>
|
|
<p class="noindent">
|
|
<dl> <dt class="haddockdesc">
|
|
<!--tex4ht:inline--><div class="tabular"> <table id="TBL-371" class="tabular"
|
|
cellspacing="0" cellpadding="0" rules="groups"
|
|
><colgroup id="TBL-371-1g"><col
|
|
id="TBL-371-1" /></colgroup><tr
|
|
style="vertical-align:baseline;" id="TBL-371-1-"><td style="white-space:nowrap; text-align:left;" id="TBL-371-1-1"
|
|
class="td11"><span
|
|
class="pcrb7t-">maybeToList</span><span
|
|
class="pcrb7t-"> ::</span><span
|
|
class="pcrb7t-"> Maybe</span><span
|
|
class="pcrb7t-"> a</span><span
|
|
class="pcrb7t-"> -></span><span
|
|
class="pcrb7t-"> [a] </span></td>
|
|
</tr></table> </div> <dd class="haddockdesc">
|
|
The <span
|
|
class="pcrr7t-">maybeToList</span><a
|
|
id="dx29-256027"></a> function returns an empty list when given <span
|
|
class="pcrr7t-">Nothing</span><a
|
|
id="dx29-256028"></a> or a singleton list when not
|
|
given <span
|
|
class="pcrr7t-">Nothing</span><a
|
|
id="dx29-256029"></a>.
|
|
</dl>
|
|
|
|
|
|
|
|
<p class="noindent">
|
|
<dl> <dt class="haddockdesc">
|
|
<!--tex4ht:inline--><div class="tabular"> <table id="TBL-372" class="tabular"
|
|
cellspacing="0" cellpadding="0" rules="groups"
|
|
><colgroup id="TBL-372-1g"><col
|
|
id="TBL-372-1" /></colgroup><tr
|
|
style="vertical-align:baseline;" id="TBL-372-1-"><td style="white-space:nowrap; text-align:left;" id="TBL-372-1-1"
|
|
class="td11"><span
|
|
class="pcrb7t-">catMaybes</span><span
|
|
class="pcrb7t-"> ::</span><span
|
|
class="pcrb7t-"> [Maybe</span><span
|
|
class="pcrb7t-"> a]</span><span
|
|
class="pcrb7t-"> -></span><span
|
|
class="pcrb7t-"> [a] </span></td>
|
|
</tr></table> </div> <dd class="haddockdesc">
|
|
The <span
|
|
class="pcrr7t-">catMaybes</span><a
|
|
id="dx29-256030"></a> function takes a list of <span
|
|
class="pcrr7t-">Maybe</span><a
|
|
id="dx29-256031"></a>s and returns a list of all the <span
|
|
class="pcrr7t-">Just</span><a
|
|
id="dx29-256032"></a> values.
|
|
</dl>
|
|
<p class="noindent">
|
|
<dl> <dt class="haddockdesc">
|
|
<!--tex4ht:inline--><div class="tabular"> <table id="TBL-373" class="tabular"
|
|
cellspacing="0" cellpadding="0" rules="groups"
|
|
><colgroup id="TBL-373-1g"><col
|
|
id="TBL-373-1" /></colgroup><tr
|
|
style="vertical-align:baseline;" id="TBL-373-1-"><td style="white-space:nowrap; text-align:left;" id="TBL-373-1-1"
|
|
class="td11"><span
|
|
class="pcrb7t-">mapMaybe</span><span
|
|
class="pcrb7t-"> ::</span><span
|
|
class="pcrb7t-"> (a</span><span
|
|
class="pcrb7t-"> -></span><span
|
|
class="pcrb7t-"> Maybe</span><span
|
|
class="pcrb7t-"> b)</span><span
|
|
class="pcrb7t-"> -></span><span
|
|
class="pcrb7t-"> [a]</span><span
|
|
class="pcrb7t-"> -></span><span
|
|
class="pcrb7t-"> [b] </span></td>
|
|
</tr></table> </div> <dd class="haddockdesc">
|
|
The <span
|
|
class="pcrr7t-">mapMaybe</span><a
|
|
id="dx29-256033"></a> function is a version of <span
|
|
class="pcrr7t-">map</span><a
|
|
id="dx29-256034"></a> which can throw out elements. In particular, the
|
|
functional argument returns something of type <span
|
|
class="pcrr7t-">Maybe</span><span
|
|
class="pcrr7t-"> b</span>. If this is <span
|
|
class="pcrr7t-">Nothing</span><a
|
|
id="dx29-256035"></a>, no element is added on
|
|
to the result list. If it just <span
|
|
class="pcrr7t-">Just</span><span
|
|
class="pcrr7t-"> b</span>, then <span
|
|
class="pcrr7t-">b </span>is included in the result list.
|
|
</dl>
|
|
<p class="noindent">
|
|
<h3 class="sectionHead"><span class="titlemark">21.2 </span> <a
|
|
id="x29-25700021.2"></a>Specification </h3>
|
|
<p class="noindent">
|
|
<div class="quote">
|
|
|
|
|
|
|
|
<div class="verbatim" id="verbatim-433">
|
|
 module Data.Maybe(
|
|
 <br />     Maybe(Nothing, Just),
|
|
 <br />     isJust, isNothing,
|
|
 <br />     fromJust, fromMaybe, listToMaybe, maybeToList,
|
|
 <br />     catMaybes, mapMaybe,
|
|
 <br />     maybe
|
|
 <br />   ) where
|
|
 <br />
|
|
 <br /> maybe                  :: b -> (a -> b) -> Maybe a -> b
|
|
 <br /> maybe n _ Nothing      =  n
|
|
 <br /> maybe _ f (Just x)     =  f x
|
|
 <br />
|
|
 <br /> isJust                 :: Maybe a -> Bool
|
|
 <br /> isJust (Just a)        =  True
|
|
 <br /> isJust Nothing         =  False
|
|
 <br />
|
|
 <br /> isNothing              :: Maybe a -> Bool
|
|
 <br /> isNothing              =  not . isJust
|
|
 <br />
|
|
 <br /> fromJust               :: Maybe a -> a
|
|
 <br /> fromJust (Just a)      =  a
|
|
 <br /> fromJust Nothing       =  error "Maybe.fromJust: Nothing"
|
|
 <br />
|
|
 <br /> fromMaybe              :: a -> Maybe a -> a
|
|
 <br /> fromMaybe d Nothing    =  d
|
|
 <br /> fromMaybe d (Just a)   =  a
|
|
 <br />
|
|
 <br /> maybeToList            :: Maybe a -> [a]
|
|
 <br /> maybeToList Nothing    =  []
|
|
 <br /> maybeToList (Just a)   =  [a]
|
|
 <br />
|
|
 <br /> listToMaybe            :: [a] -> Maybe a
|
|
 <br /> listToMaybe []         =  Nothing
|
|
 <br /> listToMaybe (a:_)      =  Just a
|
|
 <br />
|
|
 <br /> catMaybes              :: [Maybe a] -> [a]
|
|
 <br /> catMaybes ms           =  [ m | Just m <- ms ]
|
|
 <br />
|
|
 <br /> mapMaybe               :: (a -> Maybe b) -> [a] -> [b]
|
|
 <br /> mapMaybe f             =  catMaybes . map f
|
|
</div>
|
|
<p class="noindent"></div>
|
|
<!--l. 1--><div class="crosslinks"><p class="noindent">[<a
|
|
href="haskellch22.html" >next</a>] [<a
|
|
href="haskellch20.html" >prev</a>] [<a
|
|
href="haskellch20.html#tailhaskellch20.html" >prev-tail</a>] [<a
|
|
href="haskellch21.html" >front</a>] [<a
|
|
href="haskellpa2.html#haskellch21.html" >up</a>] </p></div>
|
|
<p class="noindent"> <a
|
|
id="tailhaskellch21.html"></a>
|
|
</body> </html>
|