/usr/share/doc/libghc-lambdabot-core-doc/html/src/Lambdabot-Util.html is in libghc-lambdabot-core-doc 5.1.0.1-1build5.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 | <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<!-- Generated by HsColour, http://code.haskell.org/~malcolm/hscolour/ -->
<title>src/Lambdabot/Util.hs</title>
<link type='text/css' rel='stylesheet' href='hscolour.css' />
</head>
<body>
<pre><a name="line-1"></a><span class='hs-comment'>-- Copyright (c) 2006 Don Stewart - <a href="http://www.cse.unsw.edu.au/~dons">http://www.cse.unsw.edu.au/~dons</a></span>
<a name="line-2"></a><span class='hs-comment'>-- GPL version 2 or later (see <a href="http://www.gnu.org/copyleft/gpl.html)">http://www.gnu.org/copyleft/gpl.html)</a></span>
<a name="line-3"></a>
<a name="line-4"></a><span class='hs-comment'>-- | String and other utilities</span>
<a name="line-5"></a><span class='hs-keyword'>module</span> <span class='hs-conid'>Lambdabot</span><span class='hs-varop'>.</span><span class='hs-conid'>Util</span> <span class='hs-layout'>(</span>
<a name="line-6"></a> <span class='hs-varid'>strip</span><span class='hs-layout'>,</span>
<a name="line-7"></a> <span class='hs-varid'>dropFromEnd</span><span class='hs-layout'>,</span>
<a name="line-8"></a> <span class='hs-varid'>splitFirstWord</span><span class='hs-layout'>,</span>
<a name="line-9"></a> <span class='hs-varid'>limitStr</span><span class='hs-layout'>,</span>
<a name="line-10"></a> <span class='hs-varid'>listToStr</span><span class='hs-layout'>,</span>
<a name="line-11"></a> <span class='hs-varid'>showClean</span><span class='hs-layout'>,</span>
<a name="line-12"></a> <span class='hs-varid'>expandTab</span><span class='hs-layout'>,</span>
<a name="line-13"></a> <span class='hs-varid'>arePrefixesWithSpaceOf</span><span class='hs-layout'>,</span>
<a name="line-14"></a> <span class='hs-varid'>arePrefixesOf</span><span class='hs-layout'>,</span>
<a name="line-15"></a>
<a name="line-16"></a> <span class='hs-varid'>io</span><span class='hs-layout'>,</span>
<a name="line-17"></a>
<a name="line-18"></a> <span class='hs-varid'>random</span><span class='hs-layout'>,</span>
<a name="line-19"></a> <span class='hs-varid'>randomFailureMsg</span><span class='hs-layout'>,</span>
<a name="line-20"></a> <span class='hs-varid'>randomSuccessMsg</span>
<a name="line-21"></a> <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-22"></a>
<a name="line-23"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Monad</span><span class='hs-varop'>.</span><span class='hs-conid'>Trans</span>
<a name="line-24"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Char</span>
<a name="line-25"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>List</span>
<a name="line-26"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Random</span>
<a name="line-27"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Lambdabot</span><span class='hs-varop'>.</span><span class='hs-conid'>Config</span>
<a name="line-28"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Lambdabot</span><span class='hs-varop'>.</span><span class='hs-conid'>Config</span><span class='hs-varop'>.</span><span class='hs-conid'>Core</span>
<a name="line-29"></a>
<a name="line-30"></a><span class='hs-comment'>------------------------------------------------------------------------</span>
<a name="line-31"></a>
<a name="line-32"></a><a name="splitFirstWord"></a><span class='hs-comment'>-- | Break a String into it's first word, and the rest of the string. Example:</span>
<a name="line-33"></a><span class='hs-comment'>--</span>
<a name="line-34"></a><span class='hs-comment'>-- > split_first_word "A fine day" ===> ("A", "fine day)</span>
<a name="line-35"></a><span class='hs-definition'>splitFirstWord</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>String</span> <span class='hs-comment'>-- ^ String to be broken</span>
<a name="line-36"></a> <span class='hs-keyglyph'>-></span> <span class='hs-layout'>(</span><span class='hs-conid'>String</span><span class='hs-layout'>,</span> <span class='hs-conid'>String</span><span class='hs-layout'>)</span>
<a name="line-37"></a><span class='hs-definition'>splitFirstWord</span> <span class='hs-varid'>xs</span> <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-varid'>w</span><span class='hs-layout'>,</span> <span class='hs-varid'>dropWhile</span> <span class='hs-varid'>isSpace</span> <span class='hs-varid'>xs'</span><span class='hs-layout'>)</span>
<a name="line-38"></a> <span class='hs-keyword'>where</span> <span class='hs-layout'>(</span><span class='hs-varid'>w</span><span class='hs-layout'>,</span> <span class='hs-varid'>xs'</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>break</span> <span class='hs-varid'>isSpace</span> <span class='hs-varid'>xs</span>
<a name="line-39"></a>
<a name="line-40"></a><a name="limitStr"></a><span class='hs-comment'>-- | Truncate a string to the specified length, putting ellipses at the</span>
<a name="line-41"></a><span class='hs-comment'>-- end if necessary.</span>
<a name="line-42"></a><span class='hs-definition'>limitStr</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Int</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>String</span>
<a name="line-43"></a><span class='hs-definition'>limitStr</span> <span class='hs-varid'>n</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>let</span> <span class='hs-layout'>(</span><span class='hs-varid'>b</span><span class='hs-layout'>,</span> <span class='hs-varid'>t</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>splitAt</span> <span class='hs-varid'>n</span> <span class='hs-varid'>s</span> <span class='hs-keyword'>in</span>
<a name="line-44"></a> <span class='hs-keyword'>if</span> <span class='hs-varid'>null</span> <span class='hs-varid'>t</span> <span class='hs-keyword'>then</span> <span class='hs-varid'>b</span> <span class='hs-keyword'>else</span> <span class='hs-varid'>take</span> <span class='hs-layout'>(</span><span class='hs-varid'>n</span><span class='hs-comment'>-</span><span class='hs-num'>3</span><span class='hs-layout'>)</span> <span class='hs-varid'>b</span> <span class='hs-varop'>++</span> <span class='hs-str'>"..."</span>
<a name="line-45"></a>
<a name="line-46"></a><a name="listToStr"></a><span class='hs-comment'>-- | Form a list of terms using a single conjunction. Example:</span>
<a name="line-47"></a><span class='hs-comment'>--</span>
<a name="line-48"></a><span class='hs-comment'>-- > listToStr "and" ["a", "b", "c"] ===> "a, b and c"</span>
<a name="line-49"></a><span class='hs-definition'>listToStr</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>String</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>String</span>
<a name="line-50"></a><span class='hs-definition'>listToStr</span> <span class='hs-keyword'>_</span> <span class='hs-conid'>[]</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>[]</span>
<a name="line-51"></a><span class='hs-definition'>listToStr</span> <span class='hs-varid'>conj</span> <span class='hs-layout'>(</span><span class='hs-varid'>item</span><span class='hs-conop'>:</span><span class='hs-varid'>items</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-52"></a> <span class='hs-keyword'>let</span> <span class='hs-varid'>listToStr'</span> <span class='hs-conid'>[]</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>[]</span>
<a name="line-53"></a> <span class='hs-varid'>listToStr'</span> <span class='hs-keyglyph'>[</span><span class='hs-varid'>y</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>concat</span> <span class='hs-keyglyph'>[</span><span class='hs-str'>" "</span><span class='hs-layout'>,</span> <span class='hs-varid'>conj</span><span class='hs-layout'>,</span> <span class='hs-str'>" "</span><span class='hs-layout'>,</span> <span class='hs-varid'>y</span><span class='hs-keyglyph'>]</span>
<a name="line-54"></a> <span class='hs-varid'>listToStr'</span> <span class='hs-layout'>(</span><span class='hs-varid'>y</span><span class='hs-conop'>:</span><span class='hs-varid'>ys</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>concat</span> <span class='hs-keyglyph'>[</span><span class='hs-str'>", "</span><span class='hs-layout'>,</span> <span class='hs-varid'>y</span><span class='hs-layout'>,</span> <span class='hs-varid'>listToStr'</span> <span class='hs-varid'>ys</span><span class='hs-keyglyph'>]</span>
<a name="line-55"></a> <span class='hs-keyword'>in</span> <span class='hs-varid'>item</span> <span class='hs-varop'>++</span> <span class='hs-varid'>listToStr'</span> <span class='hs-varid'>items</span>
<a name="line-56"></a>
<a name="line-57"></a><span class='hs-comment'>------------------------------------------------------------------------</span>
<a name="line-58"></a>
<a name="line-59"></a><a name="random"></a><span class='hs-comment'>-- | Pick a random element of the list.</span>
<a name="line-60"></a><span class='hs-definition'>random</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MonadIO</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-keyglyph'>[</span><span class='hs-varid'>a</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span>
<a name="line-61"></a><span class='hs-definition'>random</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>io</span> <span class='hs-varop'>.</span> <span class='hs-varid'>sample</span> <span class='hs-varop'>.</span> <span class='hs-varid'>randomElement</span>
<a name="line-62"></a>
<a name="line-63"></a><span class='hs-comment'>------------------------------------------------------------------------</span>
<a name="line-64"></a>
<a name="line-65"></a><a name="strip"></a><span class='hs-comment'>-- | 'strip' takes as input a predicate and a list and strips</span>
<a name="line-66"></a><span class='hs-comment'>-- elements matching the predicate from the prefix as well as</span>
<a name="line-67"></a><span class='hs-comment'>-- the suffix of the list. Example:</span>
<a name="line-68"></a><span class='hs-comment'>--</span>
<a name="line-69"></a><span class='hs-comment'>-- > strip isSpace " abc " ===> "abc"</span>
<a name="line-70"></a><span class='hs-definition'>strip</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Bool</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyglyph'>[</span><span class='hs-varid'>a</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyglyph'>[</span><span class='hs-varid'>a</span><span class='hs-keyglyph'>]</span>
<a name="line-71"></a><span class='hs-definition'>strip</span> <span class='hs-varid'>p</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>let</span> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>reverse</span> <span class='hs-varop'>.</span> <span class='hs-varid'>dropWhile</span> <span class='hs-varid'>p</span> <span class='hs-keyword'>in</span> <span class='hs-varid'>f</span> <span class='hs-varop'>.</span> <span class='hs-varid'>f</span>
<a name="line-72"></a>
<a name="line-73"></a><a name="dropFromEnd"></a><span class='hs-comment'>-- | Drop elements matching a predicate from the end of a list</span>
<a name="line-74"></a><span class='hs-definition'>dropFromEnd</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Bool</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyglyph'>[</span><span class='hs-varid'>a</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyglyph'>[</span><span class='hs-varid'>a</span><span class='hs-keyglyph'>]</span>
<a name="line-75"></a><span class='hs-definition'>dropFromEnd</span> <span class='hs-varid'>p</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>reverse</span> <span class='hs-varop'>.</span> <span class='hs-varid'>dropWhile</span> <span class='hs-varid'>p</span> <span class='hs-varop'>.</span> <span class='hs-varid'>reverse</span>
<a name="line-76"></a>
<a name="line-77"></a><span class='hs-comment'>------------------------------------------------------------------------</span>
<a name="line-78"></a>
<a name="line-79"></a><a name="showClean"></a><span class='hs-comment'>-- | show a list without heavyweight formatting</span>
<a name="line-80"></a><span class='hs-comment'>-- NB: assumes show instance outputs a quoted 'String'.</span>
<a name="line-81"></a><span class='hs-comment'>-- under that assumption, strips the outer quotes.</span>
<a name="line-82"></a><span class='hs-definition'>showClean</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-conid'>Show</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=></span> <span class='hs-keyglyph'>[</span><span class='hs-varid'>a</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>String</span>
<a name="line-83"></a><span class='hs-definition'>showClean</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>intercalate</span> <span class='hs-str'>" "</span> <span class='hs-varop'>.</span> <span class='hs-varid'>map</span> <span class='hs-layout'>(</span><span class='hs-varid'>init</span> <span class='hs-varop'>.</span> <span class='hs-varid'>tail</span> <span class='hs-varop'>.</span> <span class='hs-varid'>show</span><span class='hs-layout'>)</span>
<a name="line-84"></a>
<a name="line-85"></a><a name="expandTab"></a><span class='hs-comment'>-- | untab an string</span>
<a name="line-86"></a><span class='hs-definition'>expandTab</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Int</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>String</span>
<a name="line-87"></a><span class='hs-definition'>expandTab</span> <span class='hs-varid'>w</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>go</span> <span class='hs-num'>0</span>
<a name="line-88"></a> <span class='hs-keyword'>where</span>
<a name="line-89"></a> <span class='hs-varid'>go</span> <span class='hs-keyword'>_</span> <span class='hs-conid'>[]</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>[]</span>
<a name="line-90"></a> <span class='hs-varid'>go</span> <span class='hs-varid'>i</span> <span class='hs-layout'>(</span><span class='hs-chr'>'\t'</span><span class='hs-conop'>:</span><span class='hs-varid'>xs</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>replicate</span> <span class='hs-layout'>(</span><span class='hs-varid'>w</span> <span class='hs-comment'>-</span> <span class='hs-varid'>i</span> <span class='hs-varop'>`mod`</span> <span class='hs-varid'>w</span><span class='hs-layout'>)</span> <span class='hs-chr'>' '</span> <span class='hs-varop'>++</span> <span class='hs-varid'>go</span> <span class='hs-num'>0</span> <span class='hs-varid'>xs</span>
<a name="line-91"></a> <span class='hs-varid'>go</span> <span class='hs-varid'>i</span> <span class='hs-layout'>(</span><span class='hs-varid'>x</span><span class='hs-conop'>:</span><span class='hs-varid'>xs</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>x</span> <span class='hs-conop'>:</span> <span class='hs-varid'>go</span> <span class='hs-layout'>(</span><span class='hs-varid'>i</span><span class='hs-varop'>+</span><span class='hs-num'>1</span><span class='hs-layout'>)</span> <span class='hs-varid'>xs</span>
<a name="line-92"></a>
<a name="line-93"></a><span class='hs-comment'>------------------------------------------------------------------------</span>
<a name="line-94"></a>
<a name="line-95"></a><a name="io"></a><span class='hs-comment'>-- convenience:</span>
<a name="line-96"></a><span class='hs-definition'>io</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MonadIO</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-conid'>IO</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>m</span> <span class='hs-varid'>a</span>
<a name="line-97"></a><span class='hs-definition'>io</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>liftIO</span>
<a name="line-98"></a><span class='hs-comment'>{-# INLINE io #-}</span>
<a name="line-99"></a>
<a name="line-100"></a><a name="arePrefixesWithSpaceOf"></a><span class='hs-definition'>arePrefixesWithSpaceOf</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>String</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Bool</span>
<a name="line-101"></a><span class='hs-definition'>arePrefixesWithSpaceOf</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>arePrefixesOf</span> <span class='hs-varop'>.</span> <span class='hs-varid'>map</span> <span class='hs-layout'>(</span><span class='hs-varop'>++</span> <span class='hs-str'>" "</span><span class='hs-layout'>)</span>
<a name="line-102"></a>
<a name="line-103"></a><a name="arePrefixesOf"></a><span class='hs-definition'>arePrefixesOf</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>String</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Bool</span>
<a name="line-104"></a><span class='hs-definition'>arePrefixesOf</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>flip</span> <span class='hs-layout'>(</span><span class='hs-varid'>any</span> <span class='hs-varop'>.</span> <span class='hs-varid'>flip</span> <span class='hs-varid'>isPrefixOf</span><span class='hs-layout'>)</span>
<a name="line-105"></a>
<a name="line-106"></a><a name="insult"></a><span class='hs-comment'>--</span>
<a name="line-107"></a><span class='hs-comment'>-- Amusing insults from OpenBSD sudo</span>
<a name="line-108"></a><span class='hs-comment'>--</span>
<a name="line-109"></a><span class='hs-definition'>insult</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>String</span><span class='hs-keyglyph'>]</span>
<a name="line-110"></a><span class='hs-definition'>insult</span> <span class='hs-keyglyph'>=</span>
<a name="line-111"></a> <span class='hs-keyglyph'>[</span><span class='hs-str'>"Just what do you think you're doing Dave?"</span><span class='hs-layout'>,</span>
<a name="line-112"></a> <span class='hs-str'>"It can only be attributed to human error."</span><span class='hs-layout'>,</span>
<a name="line-113"></a> <span class='hs-str'>"That's something I cannot allow to happen."</span><span class='hs-layout'>,</span>
<a name="line-114"></a> <span class='hs-str'>"My mind is going. I can feel it."</span><span class='hs-layout'>,</span>
<a name="line-115"></a> <span class='hs-str'>"Sorry about this, I know it's a bit silly."</span><span class='hs-layout'>,</span>
<a name="line-116"></a> <span class='hs-str'>"Take a stress pill and think things over."</span><span class='hs-layout'>,</span>
<a name="line-117"></a> <span class='hs-str'>"This mission is too important for me to allow you to jeopardize it."</span><span class='hs-layout'>,</span>
<a name="line-118"></a> <span class='hs-str'>"I feel much better now."</span><span class='hs-layout'>,</span>
<a name="line-119"></a>
<a name="line-120"></a> <span class='hs-str'>"Wrong! You cheating scum!"</span><span class='hs-layout'>,</span>
<a name="line-121"></a> <span class='hs-str'>"And you call yourself a Rocket Scientist!"</span><span class='hs-layout'>,</span>
<a name="line-122"></a> <span class='hs-str'>"And you call yourself a Rocket Surgeon!"</span><span class='hs-layout'>,</span>
<a name="line-123"></a> <span class='hs-str'>"Where did you learn to type?"</span><span class='hs-layout'>,</span>
<a name="line-124"></a> <span class='hs-str'>"Are you on drugs?"</span><span class='hs-layout'>,</span>
<a name="line-125"></a> <span class='hs-str'>"My pet ferret can type better than you!"</span><span class='hs-layout'>,</span>
<a name="line-126"></a> <span class='hs-str'>"You type like i drive."</span><span class='hs-layout'>,</span>
<a name="line-127"></a> <span class='hs-str'>"Do you think like you type?"</span><span class='hs-layout'>,</span>
<a name="line-128"></a> <span class='hs-str'>"Your mind just hasn't been the same since the electro-shock, has it?"</span><span class='hs-layout'>,</span>
<a name="line-129"></a> <span class='hs-str'>"I don't think I can be your friend on Facebook anymore."</span><span class='hs-layout'>,</span>
<a name="line-130"></a>
<a name="line-131"></a> <span class='hs-str'>"Maybe if you used more than just two fingers..."</span><span class='hs-layout'>,</span>
<a name="line-132"></a> <span class='hs-str'>"BOB says: You seem to have forgotten your passwd, enter another!"</span><span class='hs-layout'>,</span>
<a name="line-133"></a> <span class='hs-str'>"stty: unknown mode: doofus"</span><span class='hs-layout'>,</span>
<a name="line-134"></a> <span class='hs-str'>"I can't hear you -- I'm using the scrambler."</span><span class='hs-layout'>,</span>
<a name="line-135"></a> <span class='hs-str'>"The more you drive -- the dumber you get."</span><span class='hs-layout'>,</span>
<a name="line-136"></a> <span class='hs-str'>"Listen, broccoli brains, I don't have time to listen to this trash."</span><span class='hs-layout'>,</span>
<a name="line-137"></a> <span class='hs-str'>"I've seen penguins that can type better than that."</span><span class='hs-layout'>,</span>
<a name="line-138"></a> <span class='hs-str'>"Have you considered trying to match wits with a rutabaga?"</span><span class='hs-layout'>,</span>
<a name="line-139"></a> <span class='hs-str'>"You speak an infinite deal of nothing."</span><span class='hs-layout'>,</span>
<a name="line-140"></a>
<a name="line-141"></a> <span class='hs-comment'>-- other</span>
<a name="line-142"></a> <span class='hs-str'>"Are you typing with your feet?"</span><span class='hs-layout'>,</span>
<a name="line-143"></a> <span class='hs-str'>"Abort, Retry, Panic?"</span><span class='hs-layout'>,</span>
<a name="line-144"></a>
<a name="line-145"></a> <span class='hs-comment'>-- More haskellish insults</span>
<a name="line-146"></a> <span class='hs-str'>"You untyped fool!"</span><span class='hs-layout'>,</span>
<a name="line-147"></a> <span class='hs-str'>"My brain just exploded"</span>
<a name="line-148"></a> <span class='hs-keyglyph'>]</span>
<a name="line-149"></a>
<a name="line-150"></a><a name="apology"></a><span class='hs-comment'>--</span>
<a name="line-151"></a><span class='hs-comment'>-- some more friendly replies</span>
<a name="line-152"></a><span class='hs-comment'>--</span>
<a name="line-153"></a><span class='hs-definition'>apology</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>String</span><span class='hs-keyglyph'>]</span>
<a name="line-154"></a><span class='hs-definition'>apology</span> <span class='hs-keyglyph'>=</span>
<a name="line-155"></a> <span class='hs-keyglyph'>[</span><span class='hs-str'>"I am sorry."</span><span class='hs-layout'>,</span><span class='hs-str'>"Sorry."</span><span class='hs-layout'>,</span>
<a name="line-156"></a> <span class='hs-str'>"Maybe you made a typo?"</span><span class='hs-layout'>,</span>
<a name="line-157"></a> <span class='hs-str'>"Just try something else."</span><span class='hs-layout'>,</span>
<a name="line-158"></a> <span class='hs-str'>"There are some things that I just don't know."</span><span class='hs-layout'>,</span>
<a name="line-159"></a> <span class='hs-str'>"Whoa."</span><span class='hs-layout'>,</span>
<a name="line-160"></a> <span class='hs-str'>":("</span><span class='hs-layout'>,</span><span class='hs-str'>":("</span><span class='hs-layout'>,</span>
<a name="line-161"></a> <span class='hs-str'>""</span><span class='hs-layout'>,</span><span class='hs-str'>""</span><span class='hs-layout'>,</span><span class='hs-str'>""</span>
<a name="line-162"></a> <span class='hs-keyglyph'>]</span>
<a name="line-163"></a>
<a name="line-164"></a><a name="randomFailureMsg"></a><span class='hs-definition'>randomFailureMsg</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-conid'>MonadIO</span> <span class='hs-varid'>m</span><span class='hs-layout'>,</span> <span class='hs-conid'>MonadConfig</span> <span class='hs-varid'>m</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=></span> <span class='hs-varid'>m</span> <span class='hs-conid'>String</span>
<a name="line-165"></a><span class='hs-definition'>randomFailureMsg</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
<a name="line-166"></a> <span class='hs-varid'>useInsults</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>getConfig</span> <span class='hs-varid'>enableInsults</span>
<a name="line-167"></a> <span class='hs-varid'>random</span> <span class='hs-layout'>(</span><span class='hs-keyword'>if</span> <span class='hs-varid'>useInsults</span> <span class='hs-keyword'>then</span> <span class='hs-varid'>insult</span> <span class='hs-varop'>++</span> <span class='hs-varid'>apology</span> <span class='hs-keyword'>else</span> <span class='hs-varid'>apology</span><span class='hs-layout'>)</span>
<a name="line-168"></a>
<a name="line-169"></a><a name="confirmation"></a><span class='hs-comment'>--</span>
<a name="line-170"></a><span class='hs-comment'>-- Some more interesting confirmations for @remember and @where</span>
<a name="line-171"></a><span class='hs-comment'>--</span>
<a name="line-172"></a><span class='hs-definition'>confirmation</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>String</span><span class='hs-keyglyph'>]</span>
<a name="line-173"></a><span class='hs-definition'>confirmation</span> <span class='hs-keyglyph'>=</span>
<a name="line-174"></a> <span class='hs-keyglyph'>[</span><span class='hs-str'>"Done."</span><span class='hs-layout'>,</span><span class='hs-str'>"Done."</span><span class='hs-layout'>,</span>
<a name="line-175"></a> <span class='hs-str'>"Okay."</span><span class='hs-layout'>,</span>
<a name="line-176"></a> <span class='hs-str'>"I will remember."</span><span class='hs-layout'>,</span>
<a name="line-177"></a> <span class='hs-str'>"Good to know."</span><span class='hs-layout'>,</span>
<a name="line-178"></a> <span class='hs-str'>"It is stored."</span><span class='hs-layout'>,</span>
<a name="line-179"></a> <span class='hs-str'>"I will never forget."</span><span class='hs-layout'>,</span>
<a name="line-180"></a> <span class='hs-str'>"It is forever etched in my memory."</span><span class='hs-layout'>,</span>
<a name="line-181"></a> <span class='hs-str'>"Nice!"</span>
<a name="line-182"></a> <span class='hs-keyglyph'>]</span>
<a name="line-183"></a>
<a name="line-184"></a><a name="randomSuccessMsg"></a><span class='hs-definition'>randomSuccessMsg</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MonadIO</span> <span class='hs-varid'>m</span> <span class='hs-keyglyph'>=></span> <span class='hs-varid'>m</span> <span class='hs-conid'>String</span>
<a name="line-185"></a><span class='hs-definition'>randomSuccessMsg</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>random</span> <span class='hs-varid'>confirmation</span>
</pre></body>
</html>
|