/usr/share/doc/libghc-debian-doc/html/src/Debian-Version-Common.html is in libghc-debian-doc 3.79.2-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 | <?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>Debian/Version/Common.hs</title>
<link type='text/css' rel='stylesheet' href='hscolour.css' />
</head>
<body>
<pre><a name="line-1"></a><span class='hs-comment'>-- |A module for parsing, comparing, and (eventually) modifying debian version</span>
<a name="line-2"></a><span class='hs-comment'>-- numbers. <<a href="http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Version">http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Version</a>></span>
<a name="line-3"></a><span class='hs-comment'>{-# OPTIONS -fno-warn-orphans -fno-warn-unused-do-bind #-}</span>
<a name="line-4"></a><span class='hs-keyword'>module</span> <span class='hs-conid'>Debian</span><span class='hs-varop'>.</span><span class='hs-conid'>Version</span><span class='hs-varop'>.</span><span class='hs-conid'>Common</span>
<a name="line-5"></a> <span class='hs-layout'>(</span><span class='hs-conid'>DebianVersion</span> <span class='hs-comment'>-- |Exported abstract because the internal representation is likely to change </span>
<a name="line-6"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>prettyDebianVersion</span>
<a name="line-7"></a> <span class='hs-layout'>,</span> <span class='hs-conid'>ParseDebianVersion</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-8"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>evr</span> <span class='hs-comment'>-- DebianVersion -> (Maybe Int, String, Maybe String)</span>
<a name="line-9"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>epoch</span>
<a name="line-10"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>version</span>
<a name="line-11"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>revision</span>
<a name="line-12"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>buildDebianVersion</span>
<a name="line-13"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>parseDV</span>
<a name="line-14"></a> <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-15"></a>
<a name="line-16"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Char</span> <span class='hs-layout'>(</span><span class='hs-varid'>ord</span><span class='hs-layout'>,</span> <span class='hs-varid'>isDigit</span><span class='hs-layout'>,</span> <span class='hs-varid'>isAlpha</span><span class='hs-layout'>)</span>
<a name="line-17"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Text</span><span class='hs-varop'>.</span><span class='hs-conid'>ParserCombinators</span><span class='hs-varop'>.</span><span class='hs-conid'>Parsec</span>
<a name="line-18"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Text</span><span class='hs-varop'>.</span><span class='hs-conid'>Regex</span>
<a name="line-19"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Debian</span><span class='hs-varop'>.</span><span class='hs-conid'>Version</span><span class='hs-varop'>.</span><span class='hs-conid'>Internal</span>
<a name="line-20"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Text</span><span class='hs-varop'>.</span><span class='hs-conid'>PrettyPrint</span><span class='hs-varop'>.</span><span class='hs-conid'>ANSI</span><span class='hs-varop'>.</span><span class='hs-conid'>Leijen</span> <span class='hs-layout'>(</span><span class='hs-conid'>Doc</span><span class='hs-layout'>,</span> <span class='hs-varid'>text</span><span class='hs-layout'>)</span>
<a name="line-21"></a>
<a name="line-22"></a><a name="prettyDebianVersion"></a><span class='hs-definition'>prettyDebianVersion</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>DebianVersion</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Doc</span>
<a name="line-23"></a><span class='hs-definition'>prettyDebianVersion</span> <span class='hs-layout'>(</span><span class='hs-conid'>DebianVersion</span> <span class='hs-varid'>s</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>text</span> <span class='hs-varid'>s</span>
<a name="line-24"></a>
<a name="line-25"></a><a name="instance%20Eq%20DebianVersion"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Eq</span> <span class='hs-conid'>DebianVersion</span> <span class='hs-keyword'>where</span>
<a name="line-26"></a> <span class='hs-layout'>(</span><span class='hs-conid'>DebianVersion</span> <span class='hs-keyword'>_</span> <span class='hs-varid'>v1</span><span class='hs-layout'>)</span> <span class='hs-varop'>==</span> <span class='hs-layout'>(</span><span class='hs-conid'>DebianVersion</span> <span class='hs-keyword'>_</span> <span class='hs-varid'>v2</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>v1</span> <span class='hs-varop'>==</span> <span class='hs-varid'>v2</span>
<a name="line-27"></a>
<a name="line-28"></a><a name="instance%20Ord%20DebianVersion"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Ord</span> <span class='hs-conid'>DebianVersion</span> <span class='hs-keyword'>where</span>
<a name="line-29"></a> <span class='hs-varid'>compare</span> <span class='hs-layout'>(</span><span class='hs-conid'>DebianVersion</span> <span class='hs-keyword'>_</span> <span class='hs-varid'>v1</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-conid'>DebianVersion</span> <span class='hs-keyword'>_</span> <span class='hs-varid'>v2</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>compare</span> <span class='hs-varid'>v1</span> <span class='hs-varid'>v2</span>
<a name="line-30"></a>
<a name="line-31"></a><a name="instance%20Show%20DebianVersion"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Show</span> <span class='hs-conid'>DebianVersion</span> <span class='hs-keyword'>where</span>
<a name="line-32"></a> <span class='hs-varid'>show</span> <span class='hs-varid'>v</span> <span class='hs-keyglyph'>=</span> <span class='hs-str'>"(Debian.Version.parseDebianVersion ("</span> <span class='hs-varop'>++</span> <span class='hs-varid'>show</span> <span class='hs-layout'>(</span><span class='hs-varid'>show</span> <span class='hs-layout'>(</span><span class='hs-varid'>prettyDebianVersion</span> <span class='hs-varid'>v</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-varop'>++</span> <span class='hs-str'>" :: String))"</span>
<a name="line-33"></a>
<a name="line-34"></a><a name="order"></a><span class='hs-comment'>-- make ~ less than everything, and everything else higher that letters</span>
<a name="line-35"></a><span class='hs-definition'>order</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Char</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Int</span>
<a name="line-36"></a><span class='hs-definition'>order</span> <span class='hs-varid'>c</span>
<a name="line-37"></a> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>isDigit</span> <span class='hs-varid'>c</span> <span class='hs-keyglyph'>=</span> <span class='hs-num'>0</span>
<a name="line-38"></a> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>isAlpha</span> <span class='hs-varid'>c</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>ord</span> <span class='hs-varid'>c</span>
<a name="line-39"></a> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>c</span> <span class='hs-varop'>==</span> <span class='hs-chr'>'~'</span> <span class='hs-keyglyph'>=</span> <span class='hs-comment'>-</span><span class='hs-num'>1</span>
<a name="line-40"></a> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>otherwise</span> <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-varid'>ord</span> <span class='hs-varid'>c</span><span class='hs-layout'>)</span> <span class='hs-varop'>+</span> <span class='hs-num'>256</span>
<a name="line-41"></a>
<a name="line-42"></a><a name="compareNonNumeric"></a><span class='hs-comment'>-- |We have to do this wackiness because ~ is less than the empty string</span>
<a name="line-43"></a><span class='hs-definition'>compareNonNumeric</span> <span class='hs-keyglyph'>::</span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Char</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyglyph'>[</span><span class='hs-conid'>Char</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Ordering</span>
<a name="line-44"></a><span class='hs-definition'>compareNonNumeric</span> <span class='hs-str'>""</span> <span class='hs-str'>""</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>EQ</span>
<a name="line-45"></a><span class='hs-definition'>compareNonNumeric</span> <span class='hs-str'>""</span> <span class='hs-layout'>(</span><span class='hs-chr'>'~'</span><span class='hs-conop'>:</span><span class='hs-sel'>_cs</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>GT</span>
<a name="line-46"></a><span class='hs-definition'>compareNonNumeric</span> <span class='hs-layout'>(</span><span class='hs-chr'>'~'</span><span class='hs-conop'>:</span><span class='hs-sel'>_cs</span><span class='hs-layout'>)</span> <span class='hs-str'>""</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LT</span>
<a name="line-47"></a><span class='hs-definition'>compareNonNumeric</span> <span class='hs-str'>""</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>LT</span>
<a name="line-48"></a><span class='hs-definition'>compareNonNumeric</span> <span class='hs-keyword'>_</span> <span class='hs-str'>""</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>GT</span>
<a name="line-49"></a><span class='hs-definition'>compareNonNumeric</span> <span class='hs-layout'>(</span><span class='hs-varid'>c1</span><span class='hs-conop'>:</span><span class='hs-varid'>cs1</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>c2</span><span class='hs-conop'>:</span><span class='hs-varid'>cs2</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-50"></a> <span class='hs-keyword'>if</span> <span class='hs-layout'>(</span><span class='hs-varid'>order</span> <span class='hs-varid'>c1</span><span class='hs-layout'>)</span> <span class='hs-varop'>==</span> <span class='hs-layout'>(</span><span class='hs-varid'>order</span> <span class='hs-varid'>c2</span><span class='hs-layout'>)</span>
<a name="line-51"></a> <span class='hs-keyword'>then</span> <span class='hs-varid'>compareNonNumeric</span> <span class='hs-varid'>cs1</span> <span class='hs-varid'>cs2</span>
<a name="line-52"></a> <span class='hs-keyword'>else</span> <span class='hs-varid'>compare</span> <span class='hs-layout'>(</span><span class='hs-varid'>order</span> <span class='hs-varid'>c1</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>order</span> <span class='hs-varid'>c2</span><span class='hs-layout'>)</span>
<a name="line-53"></a>
<a name="line-54"></a><a name="instance%20Eq%20NonNumeric"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Eq</span> <span class='hs-conid'>NonNumeric</span> <span class='hs-keyword'>where</span>
<a name="line-55"></a> <span class='hs-layout'>(</span><span class='hs-conid'>NonNumeric</span> <span class='hs-varid'>s1</span> <span class='hs-varid'>n1</span><span class='hs-layout'>)</span> <span class='hs-varop'>==</span> <span class='hs-layout'>(</span><span class='hs-conid'>NonNumeric</span> <span class='hs-varid'>s2</span> <span class='hs-varid'>n2</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-56"></a> <span class='hs-keyword'>case</span> <span class='hs-varid'>compareNonNumeric</span> <span class='hs-varid'>s1</span> <span class='hs-varid'>s2</span> <span class='hs-keyword'>of</span>
<a name="line-57"></a> <span class='hs-conid'>EQ</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>n1</span> <span class='hs-varop'>==</span> <span class='hs-varid'>n2</span>
<a name="line-58"></a> <span class='hs-sel'>_o</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>False</span>
<a name="line-59"></a>
<a name="line-60"></a><a name="instance%20Ord%20NonNumeric"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Ord</span> <span class='hs-conid'>NonNumeric</span> <span class='hs-keyword'>where</span>
<a name="line-61"></a> <span class='hs-varid'>compare</span> <span class='hs-layout'>(</span><span class='hs-conid'>NonNumeric</span> <span class='hs-varid'>s1</span> <span class='hs-varid'>n1</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-conid'>NonNumeric</span> <span class='hs-varid'>s2</span> <span class='hs-varid'>n2</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-62"></a> <span class='hs-keyword'>case</span> <span class='hs-varid'>compareNonNumeric</span> <span class='hs-varid'>s1</span> <span class='hs-varid'>s2</span> <span class='hs-keyword'>of</span>
<a name="line-63"></a> <span class='hs-conid'>EQ</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>compare</span> <span class='hs-varid'>n1</span> <span class='hs-varid'>n2</span>
<a name="line-64"></a> <span class='hs-varid'>o</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>o</span>
<a name="line-65"></a>
<a name="line-66"></a><a name="instance%20Eq%20Numeric"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Eq</span> <span class='hs-conid'>Numeric</span> <span class='hs-keyword'>where</span>
<a name="line-67"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Numeric</span> <span class='hs-varid'>n1</span> <span class='hs-varid'>mnn1</span><span class='hs-layout'>)</span> <span class='hs-varop'>==</span> <span class='hs-layout'>(</span><span class='hs-conid'>Numeric</span> <span class='hs-varid'>n2</span> <span class='hs-varid'>mnn2</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-68"></a> <span class='hs-keyword'>case</span> <span class='hs-varid'>compare</span> <span class='hs-varid'>n1</span> <span class='hs-varid'>n2</span> <span class='hs-keyword'>of</span>
<a name="line-69"></a> <span class='hs-conid'>EQ</span> <span class='hs-keyglyph'>-></span> <span class='hs-keyword'>case</span> <span class='hs-varid'>compareMaybeNonNumeric</span> <span class='hs-varid'>mnn1</span> <span class='hs-varid'>mnn2</span> <span class='hs-keyword'>of</span>
<a name="line-70"></a> <span class='hs-conid'>EQ</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>True</span>
<a name="line-71"></a> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>False</span>
<a name="line-72"></a> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>False</span>
<a name="line-73"></a>
<a name="line-74"></a><a name="compareMaybeNonNumeric"></a><span class='hs-definition'>compareMaybeNonNumeric</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>NonNumeric</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>NonNumeric</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Ordering</span>
<a name="line-75"></a><span class='hs-definition'>compareMaybeNonNumeric</span> <span class='hs-varid'>mnn1</span> <span class='hs-varid'>mnn2</span> <span class='hs-keyglyph'>=</span>
<a name="line-76"></a> <span class='hs-keyword'>case</span> <span class='hs-layout'>(</span><span class='hs-varid'>mnn1</span><span class='hs-layout'>,</span> <span class='hs-varid'>mnn2</span><span class='hs-layout'>)</span> <span class='hs-keyword'>of</span>
<a name="line-77"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Nothing</span><span class='hs-layout'>,</span> <span class='hs-conid'>Nothing</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>EQ</span>
<a name="line-78"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Just</span> <span class='hs-layout'>(</span><span class='hs-conid'>NonNumeric</span> <span class='hs-varid'>nn</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-conid'>Nothing</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>compareNonNumeric</span> <span class='hs-varid'>nn</span> <span class='hs-str'>""</span>
<a name="line-79"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Nothing</span><span class='hs-layout'>,</span> <span class='hs-conid'>Just</span> <span class='hs-layout'>(</span><span class='hs-conid'>NonNumeric</span> <span class='hs-varid'>nn</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>compareNonNumeric</span> <span class='hs-str'>""</span> <span class='hs-varid'>nn</span>
<a name="line-80"></a> <span class='hs-layout'>(</span><span class='hs-conid'>Just</span> <span class='hs-varid'>nn1</span><span class='hs-layout'>,</span> <span class='hs-conid'>Just</span> <span class='hs-varid'>nn2</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>compare</span> <span class='hs-varid'>nn1</span> <span class='hs-varid'>nn2</span>
<a name="line-81"></a>
<a name="line-82"></a><a name="instance%20Ord%20Numeric"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Ord</span> <span class='hs-conid'>Numeric</span> <span class='hs-keyword'>where</span>
<a name="line-83"></a> <span class='hs-varid'>compare</span> <span class='hs-layout'>(</span><span class='hs-conid'>Numeric</span> <span class='hs-varid'>n1</span> <span class='hs-varid'>mnn1</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-conid'>Numeric</span> <span class='hs-varid'>n2</span> <span class='hs-varid'>mnn2</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-84"></a> <span class='hs-keyword'>case</span> <span class='hs-varid'>compare</span> <span class='hs-varid'>n1</span> <span class='hs-varid'>n2</span> <span class='hs-keyword'>of</span>
<a name="line-85"></a> <span class='hs-conid'>EQ</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>compareMaybeNonNumeric</span> <span class='hs-varid'>mnn1</span> <span class='hs-varid'>mnn2</span>
<a name="line-86"></a> <span class='hs-varid'>o</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>o</span>
<a name="line-87"></a>
<a name="line-88"></a><span class='hs-comment'>-- * Parser</span>
<a name="line-89"></a>
<a name="line-90"></a><a name="ParseDebianVersion"></a><span class='hs-keyword'>class</span> <span class='hs-conid'>ParseDebianVersion</span> <span class='hs-varid'>a</span> <span class='hs-keyword'>where</span>
<a name="line-91"></a> <span class='hs-varid'>parseDebianVersion</span> <span class='hs-keyglyph'>::</span> <span class='hs-varid'>a</span><span class='hs-keyglyph'>-></span> <span class='hs-conid'>DebianVersion</span>
<a name="line-92"></a><span class='hs-comment'>-- |Convert a string to a debian version number. May throw an</span>
<a name="line-93"></a><span class='hs-comment'>-- exception if the string is unparsable -- but I am not sure if that</span>
<a name="line-94"></a><span class='hs-comment'>-- can currently happen. Are there any invalid version strings?</span>
<a name="line-95"></a><span class='hs-comment'>-- Perhaps ones with underscore, or something?</span>
<a name="line-96"></a>
<a name="line-97"></a><span class='hs-comment'>{-
<a name="line-98"></a>showNN :: NonNumeric -> String
<a name="line-99"></a>showNN (NonNumeric s n) = s ++ showN n
<a name="line-100"></a>
<a name="line-101"></a>showN :: Found Numeric -> String
<a name="line-102"></a>showN (Found (Numeric n nn)) = show n ++ maybe "" showNN nn
<a name="line-103"></a>showN (Simulated _) = ""
<a name="line-104"></a>-}</span>
<a name="line-105"></a>
<a name="line-106"></a><a name="parseDV"></a><span class='hs-definition'>parseDV</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>CharParser</span> <span class='hs-conid'>()</span> <span class='hs-layout'>(</span><span class='hs-conid'>Found</span> <span class='hs-conid'>Int</span><span class='hs-layout'>,</span> <span class='hs-conid'>NonNumeric</span><span class='hs-layout'>,</span> <span class='hs-conid'>Found</span> <span class='hs-conid'>NonNumeric</span><span class='hs-layout'>)</span>
<a name="line-107"></a><span class='hs-definition'>parseDV</span> <span class='hs-keyglyph'>=</span>
<a name="line-108"></a> <span class='hs-keyword'>do</span> <span class='hs-varid'>skipMany</span> <span class='hs-varop'>$</span> <span class='hs-varid'>oneOf</span> <span class='hs-str'>" \t"</span>
<a name="line-109"></a> <span class='hs-varid'>e</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>parseEpoch</span>
<a name="line-110"></a> <span class='hs-varid'>upstreamVersion</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>parseNonNumeric</span> <span class='hs-conid'>True</span> <span class='hs-conid'>True</span>
<a name="line-111"></a> <span class='hs-varid'>debianRevision</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>option</span> <span class='hs-layout'>(</span><span class='hs-conid'>Simulated</span> <span class='hs-layout'>(</span><span class='hs-conid'>NonNumeric</span> <span class='hs-str'>""</span> <span class='hs-layout'>(</span><span class='hs-conid'>Simulated</span> <span class='hs-layout'>(</span><span class='hs-conid'>Numeric</span> <span class='hs-num'>0</span> <span class='hs-conid'>Nothing</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>char</span> <span class='hs-chr'>'-'</span> <span class='hs-varop'>>></span> <span class='hs-varid'>parseNonNumeric</span> <span class='hs-conid'>True</span> <span class='hs-conid'>False</span> <span class='hs-varop'>>>=</span> <span class='hs-varid'>return</span> <span class='hs-varop'>.</span> <span class='hs-conid'>Found</span><span class='hs-layout'>)</span>
<a name="line-112"></a> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-varid'>e</span><span class='hs-layout'>,</span> <span class='hs-varid'>upstreamVersion</span><span class='hs-layout'>,</span> <span class='hs-varid'>debianRevision</span><span class='hs-layout'>)</span>
<a name="line-113"></a>
<a name="line-114"></a><a name="parseEpoch"></a><span class='hs-definition'>parseEpoch</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>CharParser</span> <span class='hs-conid'>()</span> <span class='hs-layout'>(</span><span class='hs-conid'>Found</span> <span class='hs-conid'>Int</span><span class='hs-layout'>)</span>
<a name="line-115"></a><span class='hs-definition'>parseEpoch</span> <span class='hs-keyglyph'>=</span>
<a name="line-116"></a> <span class='hs-varid'>option</span> <span class='hs-layout'>(</span><span class='hs-conid'>Simulated</span> <span class='hs-num'>0</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>try</span> <span class='hs-layout'>(</span><span class='hs-varid'>many1</span> <span class='hs-varid'>digit</span> <span class='hs-varop'>>>=</span> <span class='hs-keyglyph'>\</span><span class='hs-varid'>d</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>char</span> <span class='hs-chr'>':'</span> <span class='hs-varop'>>></span> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>Found</span> <span class='hs-layout'>(</span><span class='hs-varid'>read</span> <span class='hs-varid'>d</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-117"></a>
<a name="line-118"></a>
<a name="line-119"></a><a name="parseNonNumeric"></a><span class='hs-definition'>parseNonNumeric</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Bool</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Bool</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>CharParser</span> <span class='hs-conid'>()</span> <span class='hs-conid'>NonNumeric</span>
<a name="line-120"></a><span class='hs-definition'>parseNonNumeric</span> <span class='hs-varid'>zeroOk</span> <span class='hs-varid'>upstream</span> <span class='hs-keyglyph'>=</span>
<a name="line-121"></a> <span class='hs-keyword'>do</span> <span class='hs-varid'>nn</span> <span class='hs-keyglyph'><-</span> <span class='hs-layout'>(</span><span class='hs-keyword'>if</span> <span class='hs-varid'>zeroOk</span> <span class='hs-keyword'>then</span> <span class='hs-varid'>many</span> <span class='hs-keyword'>else</span> <span class='hs-varid'>many1</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-varid'>noneOf</span> <span class='hs-str'>"-0123456789"</span><span class='hs-layout'>)</span> <span class='hs-varop'><|></span> <span class='hs-layout'>(</span><span class='hs-keyword'>if</span> <span class='hs-varid'>upstream</span> <span class='hs-keyword'>then</span> <span class='hs-varid'>upstreamDash</span> <span class='hs-keyword'>else</span> <span class='hs-varid'>pzero</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-122"></a> <span class='hs-varid'>n</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>parseNumeric</span> <span class='hs-varid'>upstream</span>
<a name="line-123"></a> <span class='hs-varid'>return</span> <span class='hs-varop'>$</span> <span class='hs-conid'>NonNumeric</span> <span class='hs-varid'>nn</span> <span class='hs-varid'>n</span>
<a name="line-124"></a> <span class='hs-keyword'>where</span>
<a name="line-125"></a> <span class='hs-varid'>upstreamDash</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>CharParser</span> <span class='hs-conid'>()</span> <span class='hs-conid'>Char</span>
<a name="line-126"></a> <span class='hs-varid'>upstreamDash</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>try</span> <span class='hs-varop'>$</span> <span class='hs-keyword'>do</span> <span class='hs-varid'>char</span> <span class='hs-chr'>'-'</span>
<a name="line-127"></a> <span class='hs-varid'>lookAhead</span> <span class='hs-varop'>$</span> <span class='hs-layout'>(</span><span class='hs-varid'>many</span> <span class='hs-layout'>(</span><span class='hs-varid'>noneOf</span> <span class='hs-str'>"- \n\t"</span><span class='hs-layout'>)</span> <span class='hs-varop'>>></span> <span class='hs-varid'>char</span> <span class='hs-chr'>'-'</span><span class='hs-layout'>)</span>
<a name="line-128"></a> <span class='hs-varid'>return</span> <span class='hs-chr'>'-'</span>
<a name="line-129"></a>
<a name="line-130"></a><a name="parseNumeric"></a><span class='hs-definition'>parseNumeric</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Bool</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>CharParser</span> <span class='hs-conid'>()</span> <span class='hs-layout'>(</span><span class='hs-conid'>Found</span> <span class='hs-conid'>Numeric</span><span class='hs-layout'>)</span>
<a name="line-131"></a><span class='hs-definition'>parseNumeric</span> <span class='hs-varid'>upstream</span> <span class='hs-keyglyph'>=</span>
<a name="line-132"></a> <span class='hs-keyword'>do</span> <span class='hs-varid'>n</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>many1</span> <span class='hs-layout'>(</span><span class='hs-varid'>satisfy</span> <span class='hs-varid'>isDigit</span><span class='hs-layout'>)</span>
<a name="line-133"></a> <span class='hs-varid'>nn</span> <span class='hs-keyglyph'><-</span> <span class='hs-varid'>option</span> <span class='hs-conid'>Nothing</span> <span class='hs-layout'>(</span><span class='hs-varid'>parseNonNumeric</span> <span class='hs-conid'>False</span> <span class='hs-varid'>upstream</span> <span class='hs-varop'>>>=</span> <span class='hs-varid'>return</span> <span class='hs-varop'>.</span> <span class='hs-conid'>Just</span><span class='hs-layout'>)</span>
<a name="line-134"></a> <span class='hs-varid'>return</span> <span class='hs-varop'>$</span> <span class='hs-conid'>Found</span> <span class='hs-layout'>(</span><span class='hs-conid'>Numeric</span> <span class='hs-layout'>(</span><span class='hs-varid'>read</span> <span class='hs-varid'>n</span><span class='hs-layout'>)</span> <span class='hs-varid'>nn</span><span class='hs-layout'>)</span>
<a name="line-135"></a> <span class='hs-varop'><|></span>
<a name="line-136"></a> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-conid'>Simulated</span> <span class='hs-layout'>(</span><span class='hs-conid'>Numeric</span> <span class='hs-num'>0</span> <span class='hs-conid'>Nothing</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-137"></a>
<a name="line-138"></a><span class='hs-comment'>{-
<a name="line-139"></a>compareTest :: String -> String -> Ordering
<a name="line-140"></a>compareTest str1 str2 =
<a name="line-141"></a> let v1 = either (error . show) id $ parse parseDV str1 str1
<a name="line-142"></a> v2 = either (error . show) id $ parse parseDV str2 str2
<a name="line-143"></a> in
<a name="line-144"></a> compare v1 v2
<a name="line-145"></a>-}</span>
<a name="line-146"></a>
<a name="line-147"></a><a name="evr"></a><span class='hs-comment'>-- |Split a DebianVersion into its three components: epoch, version,</span>
<a name="line-148"></a><span class='hs-comment'>-- revision. It is not safe to use the parsed version number for</span>
<a name="line-149"></a><span class='hs-comment'>-- this because you will lose information, such as leading zeros.</span>
<a name="line-150"></a><span class='hs-definition'>evr</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>DebianVersion</span> <span class='hs-keyglyph'>-></span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-conid'>Int</span><span class='hs-layout'>,</span> <span class='hs-conid'>String</span><span class='hs-layout'>,</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>String</span><span class='hs-layout'>)</span>
<a name="line-151"></a><span class='hs-definition'>evr</span> <span class='hs-layout'>(</span><span class='hs-conid'>DebianVersion</span> <span class='hs-varid'>s</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-152"></a> <span class='hs-keyword'>let</span> <span class='hs-varid'>re</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>mkRegex</span> <span class='hs-str'>"^(([0-9]+):)?(([^-]*)|((.*)-([^-]*)))$"</span> <span class='hs-keyword'>in</span>
<a name="line-153"></a> <span class='hs-comment'>-- ( ) ( ( ))</span>
<a name="line-154"></a> <span class='hs-comment'>-- ( e ) ( v ) (v2) ( r )</span>
<a name="line-155"></a> <span class='hs-keyword'>case</span> <span class='hs-varid'>matchRegex</span> <span class='hs-varid'>re</span> <span class='hs-varid'>s</span> <span class='hs-keyword'>of</span>
<a name="line-156"></a> <span class='hs-conid'>Just</span> <span class='hs-keyglyph'>[</span><span class='hs-str'>""</span><span class='hs-layout'>,</span> <span class='hs-keyword'>_</span><span class='hs-layout'>,</span> <span class='hs-keyword'>_</span><span class='hs-layout'>,</span> <span class='hs-varid'>v</span><span class='hs-layout'>,</span> <span class='hs-str'>""</span><span class='hs-layout'>,</span> <span class='hs-keyword'>_</span><span class='hs-layout'>,</span> <span class='hs-keyword'>_</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-></span> <span class='hs-layout'>(</span><span class='hs-conid'>Nothing</span><span class='hs-layout'>,</span> <span class='hs-varid'>v</span><span class='hs-layout'>,</span> <span class='hs-conid'>Nothing</span><span class='hs-layout'>)</span>
<a name="line-157"></a> <span class='hs-conid'>Just</span> <span class='hs-keyglyph'>[</span><span class='hs-str'>""</span><span class='hs-layout'>,</span> <span class='hs-keyword'>_</span><span class='hs-layout'>,</span> <span class='hs-keyword'>_</span><span class='hs-layout'>,</span> <span class='hs-keyword'>_</span><span class='hs-layout'>,</span> <span class='hs-keyword'>_</span><span class='hs-layout'>,</span> <span class='hs-varid'>v</span><span class='hs-layout'>,</span> <span class='hs-varid'>r</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-></span> <span class='hs-layout'>(</span><span class='hs-conid'>Nothing</span><span class='hs-layout'>,</span> <span class='hs-varid'>v</span><span class='hs-layout'>,</span> <span class='hs-conid'>Just</span> <span class='hs-varid'>r</span><span class='hs-layout'>)</span>
<a name="line-158"></a> <span class='hs-conid'>Just</span> <span class='hs-keyglyph'>[</span><span class='hs-keyword'>_</span><span class='hs-layout'>,</span> <span class='hs-varid'>e</span><span class='hs-layout'>,</span> <span class='hs-keyword'>_</span><span class='hs-layout'>,</span> <span class='hs-varid'>v</span><span class='hs-layout'>,</span> <span class='hs-str'>""</span><span class='hs-layout'>,</span> <span class='hs-keyword'>_</span><span class='hs-layout'>,</span> <span class='hs-keyword'>_</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-></span> <span class='hs-layout'>(</span><span class='hs-conid'>Just</span> <span class='hs-layout'>(</span><span class='hs-varid'>read</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-varid'>v</span><span class='hs-layout'>,</span> <span class='hs-conid'>Nothing</span><span class='hs-layout'>)</span>
<a name="line-159"></a> <span class='hs-conid'>Just</span> <span class='hs-keyglyph'>[</span><span class='hs-keyword'>_</span><span class='hs-layout'>,</span> <span class='hs-varid'>e</span><span class='hs-layout'>,</span> <span class='hs-keyword'>_</span><span class='hs-layout'>,</span> <span class='hs-keyword'>_</span><span class='hs-layout'>,</span> <span class='hs-keyword'>_</span><span class='hs-layout'>,</span> <span class='hs-varid'>v</span><span class='hs-layout'>,</span> <span class='hs-varid'>r</span><span class='hs-keyglyph'>]</span> <span class='hs-keyglyph'>-></span> <span class='hs-layout'>(</span><span class='hs-conid'>Just</span> <span class='hs-layout'>(</span><span class='hs-varid'>read</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-varid'>v</span><span class='hs-layout'>,</span> <span class='hs-conid'>Just</span> <span class='hs-varid'>r</span><span class='hs-layout'>)</span>
<a name="line-160"></a> <span class='hs-comment'>-- I really don't think this can happen.</span>
<a name="line-161"></a> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>error</span> <span class='hs-layout'>(</span><span class='hs-str'>"Invalid Debian Version String: "</span> <span class='hs-varop'>++</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span>
<a name="line-162"></a>
<a name="line-163"></a><a name="epoch"></a><span class='hs-definition'>epoch</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>DebianVersion</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>Int</span>
<a name="line-164"></a><span class='hs-definition'>epoch</span> <span class='hs-varid'>v</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>case</span> <span class='hs-varid'>evr</span> <span class='hs-varid'>v</span> <span class='hs-keyword'>of</span> <span class='hs-layout'>(</span><span class='hs-varid'>x</span><span class='hs-layout'>,</span> <span class='hs-keyword'>_</span><span class='hs-layout'>,</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>x</span>
<a name="line-165"></a><a name="version"></a><span class='hs-definition'>version</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>DebianVersion</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>String</span>
<a name="line-166"></a><span class='hs-definition'>version</span> <span class='hs-varid'>v</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>case</span> <span class='hs-varid'>evr</span> <span class='hs-varid'>v</span> <span class='hs-keyword'>of</span> <span class='hs-layout'>(</span><span class='hs-keyword'>_</span><span class='hs-layout'>,</span> <span class='hs-varid'>x</span><span class='hs-layout'>,</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>x</span>
<a name="line-167"></a><a name="revision"></a><span class='hs-definition'>revision</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>DebianVersion</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>String</span>
<a name="line-168"></a><span class='hs-definition'>revision</span> <span class='hs-varid'>v</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>case</span> <span class='hs-varid'>evr</span> <span class='hs-varid'>v</span> <span class='hs-keyword'>of</span> <span class='hs-layout'>(</span><span class='hs-keyword'>_</span><span class='hs-layout'>,</span> <span class='hs-keyword'>_</span><span class='hs-layout'>,</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>x</span>
<a name="line-169"></a>
<a name="line-170"></a><a name="buildDebianVersion"></a><span class='hs-comment'>-- Build a Debian version number from epoch, version, revision</span>
<a name="line-171"></a><span class='hs-definition'>buildDebianVersion</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Maybe</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'>Maybe</span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>DebianVersion</span>
<a name="line-172"></a><span class='hs-definition'>buildDebianVersion</span> <span class='hs-varid'>e</span> <span class='hs-varid'>v</span> <span class='hs-varid'>r</span> <span class='hs-keyglyph'>=</span>
<a name="line-173"></a> <span class='hs-varid'>either</span> <span class='hs-layout'>(</span><span class='hs-varid'>error</span> <span class='hs-varop'>.</span> <span class='hs-varid'>show</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-conid'>DebianVersion</span> <span class='hs-varid'>str</span><span class='hs-layout'>)</span> <span class='hs-varop'>$</span> <span class='hs-varid'>parse</span> <span class='hs-varid'>parseDV</span> <span class='hs-varid'>str</span> <span class='hs-varid'>str</span>
<a name="line-174"></a> <span class='hs-keyword'>where</span>
<a name="line-175"></a> <span class='hs-varid'>str</span> <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-varid'>maybe</span> <span class='hs-str'>""</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span> <span class='hs-varid'>n</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>show</span> <span class='hs-varid'>n</span> <span class='hs-varop'>++</span> <span class='hs-str'>":"</span><span class='hs-layout'>)</span> <span class='hs-varid'>e</span> <span class='hs-varop'>++</span> <span class='hs-varid'>v</span> <span class='hs-varop'>++</span> <span class='hs-varid'>maybe</span> <span class='hs-str'>""</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>-></span> <span class='hs-str'>"-"</span> <span class='hs-varop'>++</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> <span class='hs-varid'>r</span><span class='hs-layout'>)</span>
</pre></body>
</html>
|