Sophie

Sophie

distrib > Fedora > 14 > x86_64 > media > updates > by-pkgid > a47f0719970f9f829128f311a437816d > files > 354

ghc-ForSyDe-devel-3.1.1-4.fc14.i686.rpm

<?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://www.cs.york.ac.uk/fp/darcs/hscolour/ -->
<title>src/ForSyDe/Shallow/Vector.hs</title>
<link type='text/css' rel='stylesheet' href='hscolour.css' />
</head>
<body>
<pre><a name="line-1"></a><span class='hs-comment'>-----------------------------------------------------------------------------</span>
<a name="line-2"></a><span class='hs-comment'>-- |</span>
<a name="line-3"></a><span class='hs-comment'>-- Module      :  ForSyDe.Shallow.Vector</span>
<a name="line-4"></a><span class='hs-comment'>-- Copyright   :  (c) SAM Group, KTH/ICT/ECS 2007-2008</span>
<a name="line-5"></a><span class='hs-comment'>-- License     :  BSD-style (see the file LICENSE)</span>
<a name="line-6"></a><span class='hs-comment'>-- </span>
<a name="line-7"></a><span class='hs-comment'>-- Maintainer  :  forsyde-dev@ict.kth.se</span>
<a name="line-8"></a><span class='hs-comment'>-- Stability   :  experimental</span>
<a name="line-9"></a><span class='hs-comment'>-- Portability :  portable</span>
<a name="line-10"></a><span class='hs-comment'>--</span>
<a name="line-11"></a><span class='hs-comment'>-- This module defines the data type 'Vector' and the</span>
<a name="line-12"></a><span class='hs-comment'>-- corresponding functions. It is a development of the module</span>
<a name="line-13"></a><span class='hs-comment'>-- defined by Reekie.  Though the vector is modeled as a list, it</span>
<a name="line-14"></a><span class='hs-comment'>-- should be viewed as an array, i.e. a vector has a fixed</span>
<a name="line-15"></a><span class='hs-comment'>-- size. Unfortunately, it is not possible to have the size of the</span>
<a name="line-16"></a><span class='hs-comment'>-- vector as a parameter of the vector data type, due to restrictions</span>
<a name="line-17"></a><span class='hs-comment'>-- in Haskells type system. Still most operations are defined for</span>
<a name="line-18"></a><span class='hs-comment'>-- vectors with the same size.</span>
<a name="line-19"></a><span class='hs-comment'>-----------------------------------------------------------------------------</span>
<a name="line-20"></a><span class='hs-keyword'>module</span> <span class='hs-conid'>ForSyDe</span><span class='hs-varop'>.</span><span class='hs-conid'>Shallow</span><span class='hs-varop'>.</span><span class='hs-conid'>Vector</span> <span class='hs-layout'>(</span> 
<a name="line-21"></a>              <span class='hs-conid'>Vector</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-varid'>vector</span><span class='hs-layout'>,</span> <span class='hs-varid'>fromVector</span><span class='hs-layout'>,</span> <span class='hs-varid'>unitV</span><span class='hs-layout'>,</span> <span class='hs-varid'>nullV</span><span class='hs-layout'>,</span> <span class='hs-varid'>lengthV</span><span class='hs-layout'>,</span>
<a name="line-22"></a>              <span class='hs-varid'>atV</span><span class='hs-layout'>,</span> <span class='hs-varid'>replaceV</span><span class='hs-layout'>,</span> <span class='hs-varid'>headV</span><span class='hs-layout'>,</span> <span class='hs-varid'>tailV</span><span class='hs-layout'>,</span> <span class='hs-varid'>lastV</span><span class='hs-layout'>,</span> <span class='hs-varid'>initV</span><span class='hs-layout'>,</span> <span class='hs-varid'>takeV</span><span class='hs-layout'>,</span> <span class='hs-varid'>dropV</span><span class='hs-layout'>,</span> 
<a name="line-23"></a>	      <span class='hs-varid'>selectV</span><span class='hs-layout'>,</span> <span class='hs-varid'>groupV</span><span class='hs-layout'>,</span> <span class='hs-layout'>(</span><span class='hs-varop'>&lt;+&gt;</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-layout'>(</span><span class='hs-varop'>&lt;:</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-varid'>mapV</span><span class='hs-layout'>,</span> <span class='hs-varid'>foldlV</span><span class='hs-layout'>,</span> <span class='hs-varid'>foldrV</span><span class='hs-layout'>,</span> 
<a name="line-24"></a>	      <span class='hs-comment'>-- scanlV, scanrV, meshlV, meshrV, </span>
<a name="line-25"></a>	      <span class='hs-varid'>zipWithV</span><span class='hs-layout'>,</span> <span class='hs-varid'>filterV</span><span class='hs-layout'>,</span> <span class='hs-varid'>zipV</span><span class='hs-layout'>,</span> <span class='hs-varid'>unzipV</span><span class='hs-layout'>,</span> 
<a name="line-26"></a>	      <span class='hs-varid'>concatV</span><span class='hs-layout'>,</span> <span class='hs-varid'>reverseV</span><span class='hs-layout'>,</span> <span class='hs-varid'>shiftlV</span><span class='hs-layout'>,</span> <span class='hs-varid'>shiftrV</span><span class='hs-layout'>,</span> <span class='hs-varid'>rotrV</span><span class='hs-layout'>,</span> <span class='hs-varid'>rotlV</span><span class='hs-layout'>,</span> 
<a name="line-27"></a>	      <span class='hs-varid'>generateV</span><span class='hs-layout'>,</span> <span class='hs-varid'>iterateV</span><span class='hs-layout'>,</span> <span class='hs-varid'>copyV</span> <span class='hs-comment'>--, serialV, parallelV </span>
<a name="line-28"></a>	      <span class='hs-layout'>)</span>
<a name="line-29"></a>       <span class='hs-keyword'>where</span>
<a name="line-30"></a>
<a name="line-31"></a><span class='hs-keyword'>infixr</span> <span class='hs-num'>5</span> <span class='hs-conop'>:&gt;</span>
<a name="line-32"></a><span class='hs-keyword'>infixl</span> <span class='hs-num'>5</span> <span class='hs-varop'>&lt;:</span>
<a name="line-33"></a><span class='hs-keyword'>infixr</span> <span class='hs-num'>5</span> <span class='hs-varop'>&lt;+&gt;</span>
<a name="line-34"></a>
<a name="line-35"></a><a name="Vector"></a><span class='hs-comment'>-- | The data type 'Vector' is modeled similar to a list. It has two data type constructors. 'NullV' constructs the empty vector, while ':&gt;' constructsa vector by adding an value to an existing vector. Using the inheritance mechanism of Haskell we have declared 'Vector' as an instance of the classes 'Read' and 'Show'.</span>
<a name="line-36"></a><a name="Vector"></a><span class='hs-comment'>--</span>
<a name="line-37"></a><a name="Vector"></a><span class='hs-comment'>-- | This means that the vector 1:&gt;2:&gt;3:&gt;NullV is shown as &lt;1,2,3&gt;.</span>
<a name="line-38"></a><a name="Vector"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Vector</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NullV</span>
<a name="line-39"></a>              <span class='hs-keyglyph'>|</span> <span class='hs-varid'>a</span> <span class='hs-conop'>:&gt;</span> <span class='hs-layout'>(</span><span class='hs-conid'>Vector</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Eq</span><span class='hs-layout'>)</span>
<a name="line-40"></a>
<a name="line-41"></a><a name="vector"></a><span class='hs-comment'>-- | The function 'vector' converts a list into a vector.</span>
<a name="line-42"></a><span class='hs-definition'>vector</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'>-&gt;</span> <span class='hs-conid'>Vector</span> <span class='hs-varid'>a</span>
<a name="line-43"></a>
<a name="line-44"></a><a name="fromVector"></a><span class='hs-comment'>-- | The function 'fromVector' converts a vector into a list.</span>
<a name="line-45"></a><span class='hs-definition'>fromVector</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Vector</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-varid'>a</span><span class='hs-keyglyph'>]</span>
<a name="line-46"></a>
<a name="line-47"></a><a name="unitV"></a><span class='hs-comment'>-- | The function 'unitV' creates a vector with one element. </span>
<a name="line-48"></a><span class='hs-definition'>unitV</span>    <span class='hs-keyglyph'>::</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Vector</span> <span class='hs-varid'>a</span>
<a name="line-49"></a>
<a name="line-50"></a><a name="nullV"></a><span class='hs-comment'>-- | The function 'nullV' returns 'True' if a vector is empty. </span>
<a name="line-51"></a><span class='hs-definition'>nullV</span>    <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Vector</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Bool</span>
<a name="line-52"></a>
<a name="line-53"></a><a name="lengthV"></a><span class='hs-comment'>-- | The function 'lengthV' returns the number of elements in a value. </span>
<a name="line-54"></a><span class='hs-definition'>lengthV</span>  <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Vector</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Int</span>
<a name="line-55"></a>
<a name="line-56"></a><a name="atV"></a><span class='hs-comment'>-- | The function 'atV' returns the n-th element in a vector, starting from zero.</span>
<a name="line-57"></a><span class='hs-definition'>atV</span>      <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Num</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>Vector</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>b</span>
<a name="line-58"></a>
<a name="line-59"></a><a name="replaceV"></a><span class='hs-comment'>-- |  The function 'replaceV' replaces an element in a vector.</span>
<a name="line-60"></a><span class='hs-definition'>replaceV</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Vector</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Int</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Vector</span> <span class='hs-varid'>a</span>
<a name="line-61"></a>
<a name="line-62"></a><a name="headV"></a><span class='hs-comment'>-- | The functions 'headV' returns the first element of a vector.</span>
<a name="line-63"></a><span class='hs-definition'>headV</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Vector</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>a</span>
<a name="line-64"></a>
<a name="line-65"></a><a name="lastV"></a><span class='hs-comment'>-- | The function 'lastV' returns the last element of a vector.</span>
<a name="line-66"></a><span class='hs-definition'>lastV</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Vector</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>a</span>
<a name="line-67"></a>
<a name="line-68"></a><a name="tailV"></a><span class='hs-comment'>-- | The functions 'tailV' returns all, but the first element of a vector.</span>
<a name="line-69"></a><span class='hs-definition'>tailV</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Vector</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Vector</span> <span class='hs-varid'>a</span> 
<a name="line-70"></a>
<a name="line-71"></a><a name="initV"></a><span class='hs-comment'>-- | The function 'initV' returns all but the last elements of a vector.</span>
<a name="line-72"></a><span class='hs-definition'>initV</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Vector</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Vector</span> <span class='hs-varid'>a</span> 
<a name="line-73"></a>
<a name="line-74"></a><a name="takeV"></a><span class='hs-comment'>-- | The function 'takeV' returns the first n elements of a vector.</span>
<a name="line-75"></a><span class='hs-definition'>takeV</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-conid'>Num</span> <span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Vector</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Vector</span> <span class='hs-varid'>b</span>
<a name="line-76"></a>
<a name="line-77"></a><a name="dropV"></a><span class='hs-comment'>-- | The function 'dropV' drops the first n elements of a vector.</span>
<a name="line-78"></a><span class='hs-definition'>dropV</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-conid'>Num</span> <span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-conid'>Ord</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Vector</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Vector</span> <span class='hs-varid'>b</span>
<a name="line-79"></a>
<a name="line-80"></a>
<a name="line-81"></a>
<a name="line-82"></a><a name="selectV"></a><span class='hs-comment'>-- | The function 'selectV' selects elements in the vector. The first argument gives the initial element, starting from zero, the second argument gives the stepsize between elements and the last argument gives the number of elements. </span>
<a name="line-83"></a><span class='hs-definition'>selectV</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Int</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Int</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Int</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Vector</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Vector</span> <span class='hs-varid'>a</span>
<a name="line-84"></a>
<a name="line-85"></a>
<a name="line-86"></a><a name="groupV"></a><span class='hs-comment'>-- | The function 'groupV' groups a vector into a vector of vectors of size n.</span>
<a name="line-87"></a><span class='hs-definition'>groupV</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Int</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Vector</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Vector</span> <span class='hs-layout'>(</span><span class='hs-conid'>Vector</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span>
<a name="line-88"></a>
<a name="line-89"></a><a name="<:"></a><span class='hs-comment'>-- | The operator '(&lt;:)' adds an element at the end of a vector.</span>
<a name="line-90"></a><span class='hs-layout'>(</span><span class='hs-varop'>&lt;:</span><span class='hs-layout'>)</span>  <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Vector</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Vector</span> <span class='hs-varid'>a</span>
<a name="line-91"></a>
<a name="line-92"></a><a name="<+>"></a><span class='hs-comment'>-- | The operator '(&lt;+&gt;)' concatinates two vectors.</span>
<a name="line-93"></a><span class='hs-layout'>(</span><span class='hs-varop'>&lt;+&gt;</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Vector</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Vector</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Vector</span> <span class='hs-varid'>a</span>
<a name="line-94"></a>
<a name="line-95"></a>
<a name="line-96"></a>
<a name="line-97"></a>
<a name="line-98"></a><a name="mapV"></a><span class='hs-comment'>-- | The higher-order function 'mapV' applies a function on all elements of a vector.</span>
<a name="line-99"></a><span class='hs-definition'>mapV</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Vector</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Vector</span> <span class='hs-varid'>b</span>    
<a name="line-100"></a>
<a name="line-101"></a>
<a name="line-102"></a><a name="zipWithV"></a><span class='hs-comment'>-- | The higher-order function 'zipWithV' applies a function pairwise on to vectors.</span>
<a name="line-103"></a><span class='hs-definition'>zipWithV</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>c</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Vector</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Vector</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Vector</span> <span class='hs-varid'>c</span>
<a name="line-104"></a>
<a name="line-105"></a>
<a name="line-106"></a><a name="foldlV"></a><span class='hs-comment'>-- | The higher-order functions 'foldlV' folds a function from the right to the left  over a vector using an initial value.</span>
<a name="line-107"></a><span class='hs-definition'>foldlV</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Vector</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>a</span> 
<a name="line-108"></a>
<a name="line-109"></a><a name="foldrV"></a><span class='hs-comment'>-- | The higher-order functions 'foldrV' folds a function from the left to the right over a vector using an initial value.</span>
<a name="line-110"></a><span class='hs-definition'>foldrV</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-varid'>b</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Vector</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>a</span>
<a name="line-111"></a>
<a name="line-112"></a><a name="filterV"></a><span class='hs-comment'>-- | The higher-function 'filterV' takes a predicate function and a vector and creates a new vector with the elements for which the predicate is true. </span>
<a name="line-113"></a><span class='hs-definition'>filterV</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Bool</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Vector</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Vector</span> <span class='hs-varid'>a</span>
<a name="line-114"></a>
<a name="line-115"></a><a name="zipV"></a><span class='hs-comment'>-- | The function 'zipV' zips two vectors into a vector of tuples.</span>
<a name="line-116"></a><span class='hs-definition'>zipV</span>   <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Vector</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Vector</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Vector</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span>
<a name="line-117"></a>
<a name="line-118"></a><a name="unzipV"></a><span class='hs-comment'>-- | The function 'unzipV' unzips a vector of tuples into two vectors.</span>
<a name="line-119"></a><span class='hs-definition'>unzipV</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Vector</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-conid'>Vector</span> <span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-conid'>Vector</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span>
<a name="line-120"></a>
<a name="line-121"></a>
<a name="line-122"></a>
<a name="line-123"></a><a name="shiftlV"></a><span class='hs-comment'>-- | The function 'shiftlV' shifts a value from the left into a vector. </span>
<a name="line-124"></a><span class='hs-definition'>shiftlV</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Vector</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>a</span><span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Vector</span> <span class='hs-varid'>a</span> 
<a name="line-125"></a>
<a name="line-126"></a><a name="shiftrV"></a><span class='hs-comment'>-- | The function 'shiftrV' shifts a value from the right into a vector. </span>
<a name="line-127"></a><span class='hs-definition'>shiftrV</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Vector</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Vector</span> <span class='hs-varid'>a</span>
<a name="line-128"></a>
<a name="line-129"></a><a name="rotlV"></a><span class='hs-comment'>-- | The function 'rotlV' rotates a vector to the left. Note that this fuctions does not change the size of a vector.</span>
<a name="line-130"></a><span class='hs-definition'>rotlV</span>   <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Vector</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Vector</span> <span class='hs-varid'>a</span>
<a name="line-131"></a>
<a name="line-132"></a><a name="rotrV"></a><span class='hs-comment'>-- | The function 'rotrV' rotates a vector to the right. Note that this fuction does not change the size of a vector.</span>
<a name="line-133"></a><span class='hs-definition'>rotrV</span>   <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Vector</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Vector</span> <span class='hs-varid'>a</span>
<a name="line-134"></a>
<a name="line-135"></a>
<a name="line-136"></a><a name="concatV"></a><span class='hs-comment'>-- | The function 'concatV' transforms a vector of vectors to a single vector. </span>
<a name="line-137"></a><span class='hs-definition'>concatV</span>   <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Vector</span> <span class='hs-layout'>(</span><span class='hs-conid'>Vector</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Vector</span> <span class='hs-varid'>a</span>
<a name="line-138"></a>
<a name="line-139"></a><a name="reverseV"></a><span class='hs-comment'>-- | The function 'reverseV' reverses the order of elements in a vector. </span>
<a name="line-140"></a><span class='hs-definition'>reverseV</span>  <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Vector</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Vector</span> <span class='hs-varid'>a</span>
<a name="line-141"></a>
<a name="line-142"></a>
<a name="line-143"></a><a name="iterateV"></a><span class='hs-comment'>-- | The function 'iterateV' generates a vector with a given number of elements starting from an initial element using a supplied function for the generation of elements. </span>
<a name="line-144"></a><span class='hs-comment'>--</span>
<a name="line-145"></a><span class='hs-comment'>-- &gt; Vector&gt; iterateV 5 (+1) 1</span>
<a name="line-146"></a><span class='hs-comment'>--</span>
<a name="line-147"></a><span class='hs-comment'>-- &gt; &lt;1,2,3,4,5&gt; :: Vector Integer</span>
<a name="line-148"></a><span class='hs-definition'>iterateV</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Num</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-varid'>b</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Vector</span> <span class='hs-varid'>b</span>
<a name="line-149"></a>
<a name="line-150"></a><a name="generateV"></a><span class='hs-comment'>-- | The function 'generateV' behaves in the same way, but starts with the application of the supplied function to the supplied value. </span>
<a name="line-151"></a><span class='hs-comment'>--</span>
<a name="line-152"></a><span class='hs-comment'>-- &gt; Vector&gt; generateV 5 (+1) 1</span>
<a name="line-153"></a><span class='hs-comment'>-- </span>
<a name="line-154"></a><span class='hs-comment'>-- &gt; &lt;2,3,4,5,6&gt; :: Vector Integer</span>
<a name="line-155"></a><span class='hs-definition'>generateV</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Num</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-varid'>b</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Vector</span> <span class='hs-varid'>b</span>
<a name="line-156"></a>
<a name="line-157"></a><a name="copyV"></a><span class='hs-comment'>-- | The function 'copyV' generates a vector with a given number of copies of the same element. </span>
<a name="line-158"></a><span class='hs-comment'>--</span>
<a name="line-159"></a><span class='hs-comment'>-- &gt; Vector&gt; copyV 7 5 </span>
<a name="line-160"></a><span class='hs-comment'>-- </span>
<a name="line-161"></a><span class='hs-comment'>-- &gt; &lt;5,5,5,5,5,5,5&gt; :: Vector Integer</span>
<a name="line-162"></a><span class='hs-definition'>copyV</span>     <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Num</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Vector</span> <span class='hs-varid'>b</span>
<a name="line-163"></a>
<a name="line-164"></a>
<a name="line-165"></a><span class='hs-comment'>{-
<a name="line-166"></a>-- | The function 'serialV' can be used to construct a serial network of processes.
<a name="line-167"></a>
<a name="line-168"></a>--|The function \haskell{serialV} and \haskell{parallelV} can be used to construct serial and parallel networks of processes.
<a name="line-169"></a>\begin{code}
<a name="line-170"></a>serialV		:: Vector (a -&gt; a) -&gt; a -&gt; a
<a name="line-171"></a>parallelV	:: Vector (a -&gt; b) -&gt; Vector a -&gt; Vector b
<a name="line-172"></a>\end{code}
<a name="line-173"></a>
<a name="line-174"></a>The functions \haskell{scanlV} and \haskell{scanrV} "scan" a function through a vector. The functions take an initial element apply a functions recursively first on the element and then on the result of the function application.
<a name="line-175"></a>%
<a name="line-176"></a>\begin{code}
<a name="line-177"></a>scanlV    :: (a -&gt; b -&gt; a) -&gt; a -&gt; Vector b -&gt; Vector a 
<a name="line-178"></a>scanrV    :: (b -&gt; a -&gt; a) -&gt; a -&gt; Vector b -&gt; Vector a
<a name="line-179"></a>\end{code}
<a name="line-180"></a>
<a name="line-181"></a>\index{scanlV@\haskell{scanlV}}
<a name="line-182"></a>\index{scanrV@\haskell{scanrV}}
<a name="line-183"></a>
<a name="line-184"></a>Reekie also proposed the \haskell{meshlV} and \haskell{meshrV} iterators. They are like a combination of \haskell{mapV} and \haskell{scanlV} or \haskell{scanrV}. The argument function supplies a pair of values: the first is input into the next application of this function, and the second is the output value. As an example consider the expression:
<a name="line-185"></a>%
<a name="line-186"></a>\begin{code}
<a name="line-187"></a>f x y = (x+y, x+y)
<a name="line-188"></a>
<a name="line-189"></a>s1 = vector [1,2,3,4,5]
<a name="line-190"></a>\end{code}
<a name="line-191"></a>%
<a name="line-192"></a>Here \haskell{meshlV} can be used to calculate the running sum. 
<a name="line-193"></a>%
<a name="line-194"></a>\begin{verbatim}
<a name="line-195"></a>Vector&gt; meshlV f 0 s1
<a name="line-196"></a>(15,&lt;1,3,6,10,15&gt;)
<a name="line-197"></a>\end{verbatim}
<a name="line-198"></a>
<a name="line-199"></a>\begin{code}
<a name="line-200"></a>meshlV    :: (a -&gt; b -&gt; (a, c)) -&gt; a -&gt; Vector b -&gt; (a, Vector c)
<a name="line-201"></a>meshrV    :: (a -&gt; b -&gt; (c, b)) -&gt; b -&gt; Vector a -&gt; (Vector c, b)
<a name="line-202"></a>\end{code}
<a name="line-203"></a>
<a name="line-204"></a>\index{meshlV@\haskell{meshlV}}
<a name="line-205"></a>\index{meshrV@\haskell{meshrV}}
<a name="line-206"></a>-}</span>
<a name="line-207"></a>
<a name="line-208"></a><span class='hs-keyword'>instance</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'>=&gt;</span> <span class='hs-conid'>Show</span> <span class='hs-layout'>(</span><span class='hs-conid'>Vector</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-209"></a>       <span class='hs-varid'>showsPrec</span> <span class='hs-varid'>p</span> <span class='hs-conid'>NullV</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>showParen</span> <span class='hs-layout'>(</span><span class='hs-varid'>p</span> <span class='hs-varop'>&gt;</span> <span class='hs-num'>9</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span>
<a name="line-210"></a>                             <span class='hs-varid'>showString</span> <span class='hs-str'>"&lt;&gt;"</span><span class='hs-layout'>)</span>
<a name="line-211"></a>       <span class='hs-varid'>showsPrec</span> <span class='hs-varid'>p</span> <span class='hs-varid'>xs</span>    <span class='hs-keyglyph'>=</span> <span class='hs-varid'>showParen</span> <span class='hs-layout'>(</span><span class='hs-varid'>p</span> <span class='hs-varop'>&gt;</span> <span class='hs-num'>9</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span>
<a name="line-212"></a>                             <span class='hs-varid'>showChar</span> <span class='hs-chr'>'&lt;'</span> <span class='hs-varop'>.</span> <span class='hs-varid'>showVector1</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span>
<a name="line-213"></a>                           <span class='hs-keyword'>where</span>
<a name="line-214"></a>                              <span class='hs-varid'>showVector1</span> <span class='hs-conid'>NullV</span>
<a name="line-215"></a>                                 <span class='hs-keyglyph'>=</span> <span class='hs-varid'>showChar</span> <span class='hs-chr'>'&gt;'</span>                            
<a name="line-216"></a>                              <span class='hs-varid'>showVector1</span> <span class='hs-layout'>(</span><span class='hs-varid'>y</span><span class='hs-conop'>:&gt;</span><span class='hs-conid'>NullV</span><span class='hs-layout'>)</span> 
<a name="line-217"></a>                                 <span class='hs-keyglyph'>=</span> <span class='hs-varid'>shows</span> <span class='hs-varid'>y</span> <span class='hs-varop'>.</span> <span class='hs-varid'>showChar</span> <span class='hs-chr'>'&gt;'</span>
<a name="line-218"></a>                              <span class='hs-varid'>showVector1</span> <span class='hs-layout'>(</span><span class='hs-varid'>y</span><span class='hs-conop'>:&gt;</span><span class='hs-varid'>ys</span><span class='hs-layout'>)</span>    
<a name="line-219"></a>                                 <span class='hs-keyglyph'>=</span> <span class='hs-varid'>shows</span> <span class='hs-varid'>y</span> <span class='hs-varop'>.</span> <span class='hs-varid'>showChar</span> <span class='hs-chr'>','</span> 
<a name="line-220"></a>					   <span class='hs-varop'>.</span> <span class='hs-varid'>showVector1</span> <span class='hs-varid'>ys</span>
<a name="line-221"></a>
<a name="line-222"></a>
<a name="line-223"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Read</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>Read</span> <span class='hs-layout'>(</span><span class='hs-conid'>Vector</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-224"></a>       <span class='hs-varid'>readsPrec</span> <span class='hs-keyword'>_</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>readsVector</span> <span class='hs-varid'>s</span>
<a name="line-225"></a>
<a name="line-226"></a><a name="readsVector"></a><span class='hs-definition'>readsVector</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-conid'>Read</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>ReadS</span> <span class='hs-layout'>(</span><span class='hs-conid'>Vector</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span>
<a name="line-227"></a><span class='hs-definition'>readsVector</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyglyph'>[</span><span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-varid'>x</span><span class='hs-conop'>:&gt;</span><span class='hs-conid'>NullV</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-varid'>rest</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>|</span> <span class='hs-layout'>(</span><span class='hs-str'>"&lt;"</span><span class='hs-layout'>,</span> <span class='hs-varid'>r2</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>lex</span> <span class='hs-varid'>s</span><span class='hs-layout'>,</span>
<a name="line-228"></a>                                    <span class='hs-layout'>(</span><span class='hs-varid'>x</span><span class='hs-layout'>,</span> <span class='hs-varid'>r3</span><span class='hs-layout'>)</span>   <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>reads</span> <span class='hs-varid'>r2</span><span class='hs-layout'>,</span>
<a name="line-229"></a>                                    <span class='hs-layout'>(</span><span class='hs-str'>"&gt;"</span><span class='hs-layout'>,</span> <span class='hs-varid'>rest</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>lex</span> <span class='hs-varid'>r3</span><span class='hs-keyglyph'>]</span>
<a name="line-230"></a>               <span class='hs-varop'>++</span>
<a name="line-231"></a>              <span class='hs-keyglyph'>[</span><span class='hs-layout'>(</span><span class='hs-conid'>NullV</span><span class='hs-layout'>,</span> <span class='hs-varid'>r4</span><span class='hs-layout'>)</span>        <span class='hs-keyglyph'>|</span> <span class='hs-layout'>(</span><span class='hs-str'>"&lt;"</span><span class='hs-layout'>,</span> <span class='hs-varid'>r5</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>lex</span> <span class='hs-varid'>s</span><span class='hs-layout'>,</span>
<a name="line-232"></a>                                    <span class='hs-layout'>(</span><span class='hs-str'>"&gt;"</span><span class='hs-layout'>,</span> <span class='hs-varid'>r4</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>lex</span> <span class='hs-varid'>r5</span><span class='hs-keyglyph'>]</span>
<a name="line-233"></a>               <span class='hs-varop'>++</span>
<a name="line-234"></a>              <span class='hs-keyglyph'>[</span><span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-varid'>x</span><span class='hs-conop'>:&gt;</span><span class='hs-varid'>xs</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-varid'>r6</span><span class='hs-layout'>)</span>      <span class='hs-keyglyph'>|</span> <span class='hs-layout'>(</span><span class='hs-str'>"&lt;"</span><span class='hs-layout'>,</span> <span class='hs-varid'>r7</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>lex</span> <span class='hs-varid'>s</span><span class='hs-layout'>,</span>
<a name="line-235"></a>                                    <span class='hs-layout'>(</span><span class='hs-varid'>x</span><span class='hs-layout'>,</span> <span class='hs-varid'>r8</span><span class='hs-layout'>)</span>   <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>reads</span> <span class='hs-varid'>r7</span><span class='hs-layout'>,</span>
<a name="line-236"></a>                                    <span class='hs-layout'>(</span><span class='hs-str'>","</span><span class='hs-layout'>,</span> <span class='hs-varid'>r9</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>lex</span> <span class='hs-varid'>r8</span><span class='hs-layout'>,</span>
<a name="line-237"></a>                                    <span class='hs-layout'>(</span><span class='hs-varid'>xs</span><span class='hs-layout'>,</span> <span class='hs-varid'>r6</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>readsValues</span> <span class='hs-varid'>r9</span><span class='hs-keyglyph'>]</span>
<a name="line-238"></a>
<a name="line-239"></a><a name="readsValues"></a><span class='hs-definition'>readsValues</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-conid'>Read</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>ReadS</span> <span class='hs-layout'>(</span><span class='hs-conid'>Vector</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span>
<a name="line-240"></a><span class='hs-definition'>readsValues</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyglyph'>[</span><span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-varid'>x</span><span class='hs-conop'>:&gt;</span><span class='hs-conid'>NullV</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-varid'>r1</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>|</span> <span class='hs-layout'>(</span><span class='hs-varid'>x</span><span class='hs-layout'>,</span> <span class='hs-varid'>r2</span><span class='hs-layout'>)</span>   <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>reads</span> <span class='hs-varid'>s</span><span class='hs-layout'>,</span>
<a name="line-241"></a>                                  <span class='hs-layout'>(</span><span class='hs-str'>"&gt;"</span><span class='hs-layout'>,</span> <span class='hs-varid'>r1</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>lex</span> <span class='hs-varid'>r2</span><span class='hs-keyglyph'>]</span>
<a name="line-242"></a>              <span class='hs-varop'>++</span>
<a name="line-243"></a>              <span class='hs-keyglyph'>[</span><span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-varid'>x</span><span class='hs-conop'>:&gt;</span><span class='hs-varid'>xs</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-varid'>r3</span><span class='hs-layout'>)</span>    <span class='hs-keyglyph'>|</span> <span class='hs-layout'>(</span><span class='hs-varid'>x</span><span class='hs-layout'>,</span> <span class='hs-varid'>r4</span><span class='hs-layout'>)</span>   <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>reads</span> <span class='hs-varid'>s</span><span class='hs-layout'>,</span>
<a name="line-244"></a>                                  <span class='hs-layout'>(</span><span class='hs-str'>","</span><span class='hs-layout'>,</span> <span class='hs-varid'>r5</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>lex</span> <span class='hs-varid'>r4</span><span class='hs-layout'>,</span>
<a name="line-245"></a>                                  <span class='hs-layout'>(</span><span class='hs-varid'>xs</span><span class='hs-layout'>,</span> <span class='hs-varid'>r3</span><span class='hs-layout'>)</span>  <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>readsValues</span> <span class='hs-varid'>r5</span><span class='hs-keyglyph'>]</span>
<a name="line-246"></a>
<a name="line-247"></a><span class='hs-definition'>vector</span> <span class='hs-conid'>[]</span>     <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NullV</span>
<a name="line-248"></a><span class='hs-definition'>vector</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'>:&gt;</span> <span class='hs-layout'>(</span><span class='hs-varid'>vector</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span>
<a name="line-249"></a>
<a name="line-250"></a><span class='hs-definition'>fromVector</span> <span class='hs-conid'>NullV</span>   <span class='hs-keyglyph'>=</span> <span class='hs-conid'>[]</span>
<a name="line-251"></a><span class='hs-definition'>fromVector</span> <span class='hs-layout'>(</span><span class='hs-varid'>x</span><span class='hs-conop'>:&gt;</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'>fromVector</span> <span class='hs-varid'>xs</span>
<a name="line-252"></a>
<a name="line-253"></a><span class='hs-definition'>unitV</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>x</span> <span class='hs-conop'>:&gt;</span> <span class='hs-conid'>NullV</span>
<a name="line-254"></a>
<a name="line-255"></a><span class='hs-definition'>nullV</span> <span class='hs-conid'>NullV</span>   <span class='hs-keyglyph'>=</span> <span class='hs-conid'>True</span>
<a name="line-256"></a><span class='hs-definition'>nullV</span> <span class='hs-keyword'>_</span>             <span class='hs-keyglyph'>=</span> <span class='hs-conid'>False</span>
<a name="line-257"></a>
<a name="line-258"></a><span class='hs-definition'>lengthV</span> <span class='hs-conid'>NullV</span>   <span class='hs-keyglyph'>=</span> <span class='hs-num'>0</span>
<a name="line-259"></a><span class='hs-definition'>lengthV</span> <span class='hs-layout'>(</span><span class='hs-keyword'>_</span><span class='hs-conop'>:&gt;</span><span class='hs-varid'>xs</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-num'>1</span> <span class='hs-varop'>+</span> <span class='hs-varid'>lengthV</span> <span class='hs-varid'>xs</span>
<a name="line-260"></a>
<a name="line-261"></a><span class='hs-definition'>replaceV</span> <span class='hs-varid'>vs</span> <span class='hs-varid'>n</span> <span class='hs-varid'>x</span> 
<a name="line-262"></a>    <span class='hs-keyglyph'>|</span> <span class='hs-varid'>n</span> <span class='hs-varop'>&lt;=</span> <span class='hs-varid'>lengthV</span> <span class='hs-varid'>vs</span> <span class='hs-varop'>&amp;&amp;</span> <span class='hs-varid'>n</span> <span class='hs-varop'>&gt;=</span> <span class='hs-num'>0</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>takeV</span> <span class='hs-varid'>n</span> <span class='hs-varid'>vs</span> <span class='hs-varop'>&lt;+&gt;</span> <span class='hs-varid'>unitV</span> <span class='hs-varid'>x</span> 
<a name="line-263"></a>					     <span class='hs-varop'>&lt;+&gt;</span> <span class='hs-varid'>dropV</span> <span class='hs-layout'>(</span><span class='hs-varid'>n</span><span class='hs-varop'>+</span><span class='hs-num'>1</span><span class='hs-layout'>)</span> <span class='hs-varid'>vs</span>
<a name="line-264"></a>    <span class='hs-keyglyph'>|</span> <span class='hs-varid'>otherwise</span>                 <span class='hs-keyglyph'>=</span>  <span class='hs-varid'>vs</span>
<a name="line-265"></a>
<a name="line-266"></a><span class='hs-conid'>NullV</span>   <span class='hs-varop'>`atV`</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>error</span> <span class='hs-str'>"atV: Vector has not enough elements"</span>
<a name="line-267"></a><a name="atV"></a><span class='hs-layout'>(</span><span class='hs-varid'>x</span><span class='hs-conop'>:&gt;</span><span class='hs-keyword'>_</span><span class='hs-layout'>)</span>  <span class='hs-varop'>`atV`</span> <span class='hs-num'>0</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>x</span>
<a name="line-268"></a><a name="atV"></a><span class='hs-layout'>(</span><span class='hs-keyword'>_</span><span class='hs-conop'>:&gt;</span><span class='hs-varid'>xs</span><span class='hs-layout'>)</span> <span class='hs-varop'>`atV`</span> <span class='hs-varid'>n</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>xs</span> <span class='hs-varop'>`atV`</span> <span class='hs-layout'>(</span><span class='hs-varid'>n</span><span class='hs-comment'>-</span><span class='hs-num'>1</span><span class='hs-layout'>)</span>
<a name="line-269"></a>
<a name="line-270"></a><span class='hs-definition'>headV</span> <span class='hs-conid'>NullV</span>   <span class='hs-keyglyph'>=</span> <span class='hs-varid'>error</span> <span class='hs-str'>"headV: Vector is empty"</span>
<a name="line-271"></a><span class='hs-definition'>headV</span> <span class='hs-layout'>(</span><span class='hs-varid'>v</span><span class='hs-conop'>:&gt;</span><span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>v</span>
<a name="line-272"></a>
<a name="line-273"></a><span class='hs-definition'>tailV</span> <span class='hs-conid'>NullV</span>   <span class='hs-keyglyph'>=</span> <span class='hs-varid'>error</span> <span class='hs-str'>"tailV: Vector is empty"</span>
<a name="line-274"></a><span class='hs-definition'>tailV</span> <span class='hs-layout'>(</span><span class='hs-keyword'>_</span><span class='hs-conop'>:&gt;</span><span class='hs-varid'>vs</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>vs</span>
<a name="line-275"></a>
<a name="line-276"></a><span class='hs-definition'>lastV</span> <span class='hs-conid'>NullV</span>      <span class='hs-keyglyph'>=</span> <span class='hs-varid'>error</span> <span class='hs-str'>"lastV: Vector is empty"</span>
<a name="line-277"></a><span class='hs-definition'>lastV</span> <span class='hs-layout'>(</span><span class='hs-varid'>v</span><span class='hs-conop'>:&gt;</span><span class='hs-conid'>NullV</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>v</span>
<a name="line-278"></a><span class='hs-definition'>lastV</span> <span class='hs-layout'>(</span><span class='hs-keyword'>_</span><span class='hs-conop'>:&gt;</span><span class='hs-varid'>vs</span><span class='hs-layout'>)</span>    <span class='hs-keyglyph'>=</span> <span class='hs-varid'>lastV</span> <span class='hs-varid'>vs</span>
<a name="line-279"></a>
<a name="line-280"></a><span class='hs-definition'>initV</span> <span class='hs-conid'>NullV</span>      <span class='hs-keyglyph'>=</span> <span class='hs-varid'>error</span> <span class='hs-str'>"initV: Vector is empty"</span>
<a name="line-281"></a><span class='hs-definition'>initV</span> <span class='hs-layout'>(</span><span class='hs-keyword'>_</span><span class='hs-conop'>:&gt;</span><span class='hs-conid'>NullV</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NullV</span>
<a name="line-282"></a><span class='hs-definition'>initV</span> <span class='hs-layout'>(</span><span class='hs-varid'>v</span><span class='hs-conop'>:&gt;</span><span class='hs-varid'>vs</span><span class='hs-layout'>)</span>    <span class='hs-keyglyph'>=</span> <span class='hs-varid'>v</span> <span class='hs-conop'>:&gt;</span> <span class='hs-varid'>initV</span> <span class='hs-varid'>vs</span>
<a name="line-283"></a>
<a name="line-284"></a><span class='hs-definition'>takeV</span> <span class='hs-num'>0</span> <span class='hs-keyword'>_</span>                   <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NullV</span>
<a name="line-285"></a><span class='hs-definition'>takeV</span> <span class='hs-keyword'>_</span> <span class='hs-conid'>NullV</span>               <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NullV</span>
<a name="line-286"></a><span class='hs-definition'>takeV</span> <span class='hs-varid'>n</span> <span class='hs-layout'>(</span><span class='hs-varid'>v</span><span class='hs-conop'>:&gt;</span><span class='hs-varid'>vs</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>n</span> <span class='hs-varop'>&lt;=</span> <span class='hs-num'>0</span>    <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NullV</span>
<a name="line-287"></a>                <span class='hs-keyglyph'>|</span> <span class='hs-varid'>otherwise</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>v</span> <span class='hs-conop'>:&gt;</span> <span class='hs-varid'>takeV</span> <span class='hs-layout'>(</span><span class='hs-varid'>n</span><span class='hs-comment'>-</span><span class='hs-num'>1</span><span class='hs-layout'>)</span> <span class='hs-varid'>vs</span>
<a name="line-288"></a>
<a name="line-289"></a><span class='hs-definition'>dropV</span> <span class='hs-num'>0</span> <span class='hs-varid'>vs</span>                  <span class='hs-keyglyph'>=</span> <span class='hs-varid'>vs</span>
<a name="line-290"></a><span class='hs-definition'>dropV</span> <span class='hs-keyword'>_</span> <span class='hs-conid'>NullV</span>               <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NullV</span>
<a name="line-291"></a><span class='hs-definition'>dropV</span> <span class='hs-varid'>n</span> <span class='hs-layout'>(</span><span class='hs-varid'>v</span><span class='hs-conop'>:&gt;</span><span class='hs-varid'>vs</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>n</span> <span class='hs-varop'>&lt;=</span> <span class='hs-num'>0</span>    <span class='hs-keyglyph'>=</span> <span class='hs-varid'>v</span> <span class='hs-conop'>:&gt;</span> <span class='hs-varid'>vs</span>
<a name="line-292"></a>                <span class='hs-keyglyph'>|</span> <span class='hs-varid'>otherwise</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>dropV</span> <span class='hs-layout'>(</span><span class='hs-varid'>n</span><span class='hs-comment'>-</span><span class='hs-num'>1</span><span class='hs-layout'>)</span> <span class='hs-varid'>vs</span>
<a name="line-293"></a>
<a name="line-294"></a><span class='hs-definition'>selectV</span> <span class='hs-varid'>f</span> <span class='hs-varid'>s</span> <span class='hs-varid'>n</span> <span class='hs-varid'>vs</span> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>n</span> <span class='hs-varop'>&lt;=</span> <span class='hs-num'>0</span>               
<a name="line-295"></a>                     <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NullV</span>
<a name="line-296"></a>                 <span class='hs-keyglyph'>|</span> <span class='hs-layout'>(</span><span class='hs-varid'>f</span><span class='hs-varop'>+</span><span class='hs-varid'>s</span><span class='hs-varop'>*</span><span class='hs-varid'>n</span><span class='hs-comment'>-</span><span class='hs-num'>1</span><span class='hs-layout'>)</span> <span class='hs-varop'>&gt;</span> <span class='hs-varid'>lengthV</span> <span class='hs-varid'>vs</span> 
<a name="line-297"></a>                    <span class='hs-keyglyph'>=</span> <span class='hs-varid'>error</span> <span class='hs-str'>"selectV: Vector has not enough elements"</span>
<a name="line-298"></a>                 <span class='hs-keyglyph'>|</span> <span class='hs-varid'>otherwise</span>            
<a name="line-299"></a>                    <span class='hs-keyglyph'>=</span> <span class='hs-varid'>atV</span> <span class='hs-varid'>vs</span> <span class='hs-varid'>f</span> <span class='hs-conop'>:&gt;</span> <span class='hs-varid'>selectV</span> <span class='hs-layout'>(</span><span class='hs-varid'>f</span><span class='hs-varop'>+</span><span class='hs-varid'>s</span><span class='hs-layout'>)</span> <span class='hs-varid'>s</span> <span class='hs-layout'>(</span><span class='hs-varid'>n</span><span class='hs-comment'>-</span><span class='hs-num'>1</span><span class='hs-layout'>)</span> <span class='hs-varid'>vs</span>
<a name="line-300"></a>
<a name="line-301"></a><span class='hs-definition'>groupV</span> <span class='hs-varid'>n</span> <span class='hs-varid'>v</span> 
<a name="line-302"></a>      <span class='hs-keyglyph'>|</span> <span class='hs-varid'>lengthV</span> <span class='hs-varid'>v</span> <span class='hs-varop'>&lt;</span> <span class='hs-varid'>n</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NullV</span>
<a name="line-303"></a>      <span class='hs-keyglyph'>|</span> <span class='hs-varid'>otherwise</span>     <span class='hs-keyglyph'>=</span> <span class='hs-varid'>selectV</span> <span class='hs-num'>0</span> <span class='hs-num'>1</span> <span class='hs-varid'>n</span> <span class='hs-varid'>v</span> 
<a name="line-304"></a>			<span class='hs-conop'>:&gt;</span> <span class='hs-varid'>groupV</span> <span class='hs-varid'>n</span> <span class='hs-layout'>(</span><span class='hs-varid'>selectV</span> <span class='hs-varid'>n</span> <span class='hs-num'>1</span> <span class='hs-layout'>(</span><span class='hs-varid'>lengthV</span> <span class='hs-varid'>v</span><span class='hs-comment'>-</span><span class='hs-varid'>n</span><span class='hs-layout'>)</span> <span class='hs-varid'>v</span><span class='hs-layout'>)</span>
<a name="line-305"></a>
<a name="line-306"></a><span class='hs-conid'>NullV</span> <span class='hs-varop'>&lt;+&gt;</span> <span class='hs-varid'>ys</span>   <span class='hs-keyglyph'>=</span> <span class='hs-varid'>ys</span>
<a name="line-307"></a><span class='hs-layout'>(</span><span class='hs-varid'>x</span><span class='hs-conop'>:&gt;</span><span class='hs-varid'>xs</span><span class='hs-layout'>)</span> <span class='hs-varop'>&lt;+&gt;</span> <span class='hs-varid'>ys</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>x</span> <span class='hs-conop'>:&gt;</span> <span class='hs-layout'>(</span><span class='hs-varid'>xs</span> <span class='hs-varop'>&lt;+&gt;</span> <span class='hs-varid'>ys</span><span class='hs-layout'>)</span> 
<a name="line-308"></a>
<a name="line-309"></a><a name="xs"></a><span class='hs-definition'>xs</span> <span class='hs-varop'>&lt;:</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>xs</span> <span class='hs-varop'>&lt;+&gt;</span> <span class='hs-varid'>unitV</span> <span class='hs-varid'>x</span>         
<a name="line-310"></a>
<a name="line-311"></a><span class='hs-definition'>mapV</span> <span class='hs-keyword'>_</span> <span class='hs-conid'>NullV</span>   <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NullV</span>
<a name="line-312"></a><span class='hs-definition'>mapV</span> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-varid'>x</span><span class='hs-conop'>:&gt;</span><span class='hs-varid'>xs</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>f</span> <span class='hs-varid'>x</span> <span class='hs-conop'>:&gt;</span> <span class='hs-varid'>mapV</span> <span class='hs-varid'>f</span> <span class='hs-varid'>xs</span>
<a name="line-313"></a>
<a name="line-314"></a><span class='hs-definition'>zipWithV</span> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-varid'>x</span><span class='hs-conop'>:&gt;</span><span class='hs-varid'>xs</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>y</span><span class='hs-conop'>:&gt;</span><span class='hs-varid'>ys</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>f</span> <span class='hs-varid'>x</span> <span class='hs-varid'>y</span> <span class='hs-conop'>:&gt;</span> <span class='hs-layout'>(</span><span class='hs-varid'>zipWithV</span> <span class='hs-varid'>f</span> <span class='hs-varid'>xs</span> <span class='hs-varid'>ys</span><span class='hs-layout'>)</span>
<a name="line-315"></a><span class='hs-definition'>zipWithV</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span>       <span class='hs-keyword'>_</span>       <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NullV</span>
<a name="line-316"></a>
<a name="line-317"></a><span class='hs-definition'>foldlV</span> <span class='hs-keyword'>_</span> <span class='hs-varid'>a</span> <span class='hs-conid'>NullV</span>   <span class='hs-keyglyph'>=</span> <span class='hs-varid'>a</span>
<a name="line-318"></a><span class='hs-definition'>foldlV</span> <span class='hs-varid'>f</span> <span class='hs-varid'>a</span> <span class='hs-layout'>(</span><span class='hs-varid'>x</span><span class='hs-conop'>:&gt;</span><span class='hs-varid'>xs</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>foldlV</span> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-varid'>f</span> <span class='hs-varid'>a</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span> <span class='hs-varid'>xs</span>
<a name="line-319"></a>
<a name="line-320"></a><span class='hs-definition'>foldrV</span> <span class='hs-keyword'>_</span> <span class='hs-varid'>a</span> <span class='hs-conid'>NullV</span>   <span class='hs-keyglyph'>=</span> <span class='hs-varid'>a</span> 
<a name="line-321"></a><span class='hs-definition'>foldrV</span> <span class='hs-varid'>f</span> <span class='hs-varid'>a</span> <span class='hs-layout'>(</span><span class='hs-varid'>x</span><span class='hs-conop'>:&gt;</span><span class='hs-varid'>xs</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>f</span> <span class='hs-varid'>x</span> <span class='hs-layout'>(</span><span class='hs-varid'>foldrV</span> <span class='hs-varid'>f</span> <span class='hs-varid'>a</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span>
<a name="line-322"></a>
<a name="line-323"></a><span class='hs-definition'>filterV</span> <span class='hs-keyword'>_</span> <span class='hs-conid'>NullV</span>   <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NullV</span>
<a name="line-324"></a><span class='hs-definition'>filterV</span> <span class='hs-varid'>p</span> <span class='hs-layout'>(</span><span class='hs-varid'>v</span><span class='hs-conop'>:&gt;</span><span class='hs-varid'>vs</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>if</span> <span class='hs-layout'>(</span><span class='hs-varid'>p</span> <span class='hs-varid'>v</span><span class='hs-layout'>)</span> <span class='hs-keyword'>then</span>
<a name="line-325"></a>                     <span class='hs-varid'>v</span> <span class='hs-conop'>:&gt;</span> <span class='hs-varid'>filterV</span> <span class='hs-varid'>p</span> <span class='hs-varid'>vs</span>
<a name="line-326"></a>                  <span class='hs-keyword'>else</span> 
<a name="line-327"></a>                     <span class='hs-varid'>filterV</span> <span class='hs-varid'>p</span> <span class='hs-varid'>vs</span>
<a name="line-328"></a>
<a name="line-329"></a><span class='hs-definition'>zipV</span> <span class='hs-layout'>(</span><span class='hs-varid'>x</span><span class='hs-conop'>:&gt;</span><span class='hs-varid'>xs</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>y</span><span class='hs-conop'>:&gt;</span><span class='hs-varid'>ys</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-varid'>x</span><span class='hs-layout'>,</span> <span class='hs-varid'>y</span><span class='hs-layout'>)</span> <span class='hs-conop'>:&gt;</span> <span class='hs-varid'>zipV</span> <span class='hs-varid'>xs</span> <span class='hs-varid'>ys</span>
<a name="line-330"></a><span class='hs-definition'>zipV</span> <span class='hs-keyword'>_</span>       <span class='hs-keyword'>_</span>       <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NullV</span>
<a name="line-331"></a>
<a name="line-332"></a><span class='hs-definition'>unzipV</span> <span class='hs-conid'>NullV</span>           <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-conid'>NullV</span><span class='hs-layout'>,</span> <span class='hs-conid'>NullV</span><span class='hs-layout'>)</span>
<a name="line-333"></a><span class='hs-definition'>unzipV</span> <span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-varid'>x</span><span class='hs-layout'>,</span> <span class='hs-varid'>y</span><span class='hs-layout'>)</span> <span class='hs-conop'>:&gt;</span> <span class='hs-varid'>xys</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-varid'>x</span><span class='hs-conop'>:&gt;</span><span class='hs-varid'>xs</span><span class='hs-layout'>,</span> <span class='hs-varid'>y</span><span class='hs-conop'>:&gt;</span><span class='hs-varid'>ys</span><span class='hs-layout'>)</span> 
<a name="line-334"></a>			 <span class='hs-keyword'>where</span> <span class='hs-layout'>(</span><span class='hs-varid'>xs</span><span class='hs-layout'>,</span> <span class='hs-varid'>ys</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>unzipV</span> <span class='hs-varid'>xys</span>
<a name="line-335"></a>
<a name="line-336"></a><span class='hs-definition'>shiftlV</span> <span class='hs-varid'>vs</span> <span class='hs-varid'>v</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>v</span> <span class='hs-conop'>:&gt;</span> <span class='hs-varid'>initV</span> <span class='hs-varid'>vs</span>
<a name="line-337"></a>
<a name="line-338"></a><span class='hs-definition'>shiftrV</span> <span class='hs-varid'>vs</span> <span class='hs-varid'>v</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>tailV</span> <span class='hs-varid'>vs</span> <span class='hs-varop'>&lt;:</span> <span class='hs-varid'>v</span>
<a name="line-339"></a>
<a name="line-340"></a><span class='hs-definition'>rotrV</span> <span class='hs-conid'>NullV</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NullV</span>
<a name="line-341"></a><span class='hs-definition'>rotrV</span> <span class='hs-varid'>vs</span>    <span class='hs-keyglyph'>=</span> <span class='hs-varid'>tailV</span> <span class='hs-varid'>vs</span> <span class='hs-varop'>&lt;:</span> <span class='hs-varid'>headV</span> <span class='hs-varid'>vs</span>
<a name="line-342"></a>
<a name="line-343"></a><span class='hs-definition'>rotlV</span> <span class='hs-conid'>NullV</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NullV</span>
<a name="line-344"></a><span class='hs-definition'>rotlV</span> <span class='hs-varid'>vs</span>    <span class='hs-keyglyph'>=</span> <span class='hs-varid'>lastV</span> <span class='hs-varid'>vs</span> <span class='hs-conop'>:&gt;</span> <span class='hs-varid'>initV</span> <span class='hs-varid'>vs</span>
<a name="line-345"></a>
<a name="line-346"></a><span class='hs-definition'>concatV</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>foldrV</span> <span class='hs-layout'>(</span><span class='hs-varop'>&lt;+&gt;</span><span class='hs-layout'>)</span> <span class='hs-conid'>NullV</span>
<a name="line-347"></a>
<a name="line-348"></a><span class='hs-definition'>reverseV</span> <span class='hs-conid'>NullV</span>   <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NullV</span>
<a name="line-349"></a><span class='hs-definition'>reverseV</span> <span class='hs-layout'>(</span><span class='hs-varid'>v</span><span class='hs-conop'>:&gt;</span><span class='hs-varid'>vs</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>reverseV</span> <span class='hs-varid'>vs</span> <span class='hs-varop'>&lt;:</span> <span class='hs-varid'>v</span>
<a name="line-350"></a>
<a name="line-351"></a><span class='hs-definition'>generateV</span> <span class='hs-num'>0</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NullV</span>
<a name="line-352"></a><span class='hs-definition'>generateV</span> <span class='hs-varid'>n</span> <span class='hs-varid'>f</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>x</span> <span class='hs-conop'>:&gt;</span> <span class='hs-varid'>generateV</span> <span class='hs-layout'>(</span><span class='hs-varid'>n</span><span class='hs-comment'>-</span><span class='hs-num'>1</span><span class='hs-layout'>)</span> <span class='hs-varid'>f</span> <span class='hs-varid'>x</span> 
<a name="line-353"></a>                <span class='hs-keyword'>where</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>f</span> <span class='hs-varid'>a</span>
<a name="line-354"></a>
<a name="line-355"></a><span class='hs-definition'>iterateV</span> <span class='hs-num'>0</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NullV</span>
<a name="line-356"></a><span class='hs-definition'>iterateV</span> <span class='hs-varid'>n</span> <span class='hs-varid'>f</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>a</span> <span class='hs-conop'>:&gt;</span> <span class='hs-varid'>iterateV</span> <span class='hs-layout'>(</span><span class='hs-varid'>n</span><span class='hs-comment'>-</span><span class='hs-num'>1</span><span class='hs-layout'>)</span> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-varid'>f</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span>
<a name="line-357"></a>
<a name="line-358"></a><span class='hs-definition'>copyV</span> <span class='hs-varid'>k</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>iterateV</span> <span class='hs-varid'>k</span> <span class='hs-varid'>id</span> <span class='hs-varid'>x</span> 
<a name="line-359"></a>
<a name="line-360"></a><span class='hs-comment'>{-
<a name="line-361"></a>serialV  fs      x = serialV' (reverseV fs ) x
<a name="line-362"></a>  where
<a name="line-363"></a>    serialV' NullV   x = x
<a name="line-364"></a>    serialV' (f:&gt;fs) x = serialV fs (f x)
<a name="line-365"></a>
<a name="line-366"></a>
<a name="line-367"></a>parallelV NullV   NullV   = NullV
<a name="line-368"></a>parallelV _	  NullV   
<a name="line-369"></a>   = error "parallelV: Vectors have not the same size!"
<a name="line-370"></a>parallelV NullV	  _       
<a name="line-371"></a>   = error "parallelV: Vectors have not the same size!"
<a name="line-372"></a>parallelV (f:&gt;fs) (x:&gt;xs) = f x :&gt; parallelV fs xs
<a name="line-373"></a>
<a name="line-374"></a>scanlV _ _ NullV   = NullV
<a name="line-375"></a>scanlV f a (x:&gt;xs) = q :&gt; scanlV f q xs 
<a name="line-376"></a>                   where q = f a x
<a name="line-377"></a>
<a name="line-378"></a>scanrV _ _ NullV      = NullV
<a name="line-379"></a>scanrV f a (x:&gt;NullV) = f x a :&gt; NullV
<a name="line-380"></a>scanrV f a (x:&gt;xs)    = f x y :&gt; ys 
<a name="line-381"></a>                      where ys@(y:&gt;_) = scanrV f a xs
<a name="line-382"></a>
<a name="line-383"></a>meshlV _ a NullV   = (a, NullV)
<a name="line-384"></a>meshlV f a (x:&gt;xs) = (a'', y:&gt;ys) 
<a name="line-385"></a>                   where (a', y)   = f a x
<a name="line-386"></a>                         (a'', ys) = meshlV f a' xs
<a name="line-387"></a>
<a name="line-388"></a>meshrV _ a NullV    = (NullV, a)
<a name="line-389"></a>meshrV f a (x:&gt;xs)  = (y:&gt;ys, a'') 
<a name="line-390"></a>                    where (y, a'') = f x a'
<a name="line-391"></a>                          (ys, a') = meshrV f a xs
<a name="line-392"></a>-}</span>
<a name="line-393"></a>
<a name="line-394"></a>
<a name="line-395"></a>
<a name="line-396"></a>
<a name="line-397"></a>
<a name="line-398"></a>
</pre></body>
</html>