Sophie

Sophie

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

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/SynchronousLib.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.SynchronousLib</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'>-- The synchronuous library defines process constructors and processes</span>
<a name="line-12"></a><span class='hs-comment'>-- for the synchronous computational model. A process constructor is a</span>
<a name="line-13"></a><span class='hs-comment'>-- higher order function which together with combinational function(s)</span>
<a name="line-14"></a><span class='hs-comment'>-- and values as arguments constructs a process.</span>
<a name="line-15"></a><span class='hs-comment'>-----------------------------------------------------------------------------</span>
<a name="line-16"></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'>SynchronousLib</span><span class='hs-layout'>(</span>
<a name="line-17"></a>			<span class='hs-comment'>-- * Combinational process constructors</span>
<a name="line-18"></a>			<span class='hs-comment'>-- | Combinational process constructors are used for processes that do not have a state.</span>
<a name="line-19"></a>			<span class='hs-varid'>mapSY</span><span class='hs-layout'>,</span> <span class='hs-varid'>zipWithSY</span><span class='hs-layout'>,</span> <span class='hs-varid'>zipWith3SY</span><span class='hs-layout'>,</span> 
<a name="line-20"></a>			<span class='hs-varid'>zipWith4SY</span><span class='hs-layout'>,</span> <span class='hs-varid'>zipWithxSY</span><span class='hs-layout'>,</span> 
<a name="line-21"></a>			<span class='hs-comment'>-- * Sequential process constructors</span>
<a name="line-22"></a>			<span class='hs-comment'>-- | Sequential process constructors are used for processes that have a state. One of the input parameters is the initial state.</span>
<a name="line-23"></a>			<span class='hs-varid'>delaySY</span><span class='hs-layout'>,</span> <span class='hs-varid'>delaynSY</span><span class='hs-layout'>,</span>
<a name="line-24"></a>			<span class='hs-varid'>scanlSY</span><span class='hs-layout'>,</span> <span class='hs-varid'>scanl2SY</span><span class='hs-layout'>,</span> <span class='hs-varid'>scanl3SY</span><span class='hs-layout'>,</span> <span class='hs-varid'>scanldSY</span><span class='hs-layout'>,</span> <span class='hs-varid'>scanld2SY</span><span class='hs-layout'>,</span>
<a name="line-25"></a>			<span class='hs-varid'>scanld3SY</span><span class='hs-layout'>,</span> <span class='hs-varid'>mooreSY</span><span class='hs-layout'>,</span> <span class='hs-varid'>moore2SY</span><span class='hs-layout'>,</span> <span class='hs-varid'>moore3SY</span><span class='hs-layout'>,</span> <span class='hs-varid'>mealySY</span><span class='hs-layout'>,</span>
<a name="line-26"></a>			<span class='hs-varid'>mealy2SY</span><span class='hs-layout'>,</span> <span class='hs-varid'>mealy3SY</span><span class='hs-layout'>,</span> <span class='hs-varid'>sourceSY</span><span class='hs-layout'>,</span> 
<a name="line-27"></a>			<span class='hs-varid'>filterSY</span><span class='hs-layout'>,</span> <span class='hs-varid'>fillSY</span><span class='hs-layout'>,</span> <span class='hs-varid'>holdSY</span><span class='hs-layout'>,</span>
<a name="line-28"></a>			<span class='hs-comment'>-- * Synchronous Processes</span>
<a name="line-29"></a>			<span class='hs-comment'>-- | The library contains a few simple processes that are applicable to many cases.</span>
<a name="line-30"></a>			<span class='hs-varid'>whenSY</span><span class='hs-layout'>,</span> <span class='hs-varid'>zipSY</span><span class='hs-layout'>,</span> <span class='hs-varid'>zip3SY</span><span class='hs-layout'>,</span> <span class='hs-varid'>zip4SY</span><span class='hs-layout'>,</span> <span class='hs-varid'>zip5SY</span><span class='hs-layout'>,</span> <span class='hs-varid'>zip6SY</span><span class='hs-layout'>,</span> 
<a name="line-31"></a>                        <span class='hs-varid'>unzipSY</span><span class='hs-layout'>,</span> <span class='hs-varid'>unzip3SY</span><span class='hs-layout'>,</span> <span class='hs-varid'>unzip4SY</span><span class='hs-layout'>,</span> <span class='hs-varid'>unzip5SY</span><span class='hs-layout'>,</span> <span class='hs-varid'>unzip6SY</span><span class='hs-layout'>,</span>
<a name="line-32"></a>                        <span class='hs-varid'>zipxSY</span><span class='hs-layout'>,</span> <span class='hs-varid'>unzipxSY</span><span class='hs-layout'>,</span> <span class='hs-varid'>mapxSY</span><span class='hs-layout'>,</span> 
<a name="line-33"></a>			<span class='hs-varid'>fstSY</span><span class='hs-layout'>,</span> <span class='hs-varid'>sndSY</span>
<a name="line-34"></a>        	     <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-35"></a>
<a name="line-36"></a><span class='hs-keyword'>import</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'>CoreLib</span>
<a name="line-37"></a>
<a name="line-38"></a><span class='hs-comment'>----------------------------------------</span>
<a name="line-39"></a><span class='hs-comment'>--                                    --</span>
<a name="line-40"></a><span class='hs-comment'>-- COMBINATIONAL PROCESS CONSTRUCTORS --</span>
<a name="line-41"></a><span class='hs-comment'>--                                    --</span>
<a name="line-42"></a><span class='hs-comment'>----------------------------------------</span>
<a name="line-43"></a>
<a name="line-44"></a><a name="mapSY"></a><span class='hs-comment'>-- | The process constructor 'mapSY' takes a combinational function as argument and returns a process with one input signal and one output signal.</span>
<a name="line-45"></a><span class='hs-definition'>mapSY</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'>Signal</span> <span class='hs-varid'>a</span>	<span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>b</span>
<a name="line-46"></a><span class='hs-definition'>mapSY</span> <span class='hs-keyword'>_</span> <span class='hs-conid'>NullS</span>	<span class='hs-keyglyph'>=</span> <span class='hs-conid'>NullS</span>
<a name="line-47"></a><span class='hs-definition'>mapSY</span> <span class='hs-varid'>f</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'>f</span> <span class='hs-varid'>x</span> <span class='hs-conop'>:-</span> <span class='hs-layout'>(</span><span class='hs-varid'>mapSY</span> <span class='hs-varid'>f</span> <span class='hs-varid'>xs</span><span class='hs-layout'>)</span>
<a name="line-48"></a>
<a name="line-49"></a><a name="zipWithSY"></a><span class='hs-comment'>-- | The process constructor 'zipWithSY' takes a combinational function as argument and returns a process with two input signals and one output signal.</span>
<a name="line-50"></a><span class='hs-definition'>zipWithSY</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'>Signal</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>c</span>
<a name="line-51"></a><span class='hs-definition'>zipWithSY</span> <span class='hs-keyword'>_</span> <span class='hs-conid'>NullS</span>   <span class='hs-keyword'>_</span>       <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NullS</span>
<a name="line-52"></a><span class='hs-definition'>zipWithSY</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span>       <span class='hs-conid'>NullS</span>   <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NullS</span>
<a name="line-53"></a><span class='hs-definition'>zipWithSY</span> <span class='hs-varid'>f</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-layout'>(</span><span class='hs-varid'>y</span><span class='hs-conop'>:-</span><span class='hs-varid'>ys</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>f</span> <span class='hs-varid'>x</span> <span class='hs-varid'>y</span> <span class='hs-conop'>:-</span> <span class='hs-layout'>(</span><span class='hs-varid'>zipWithSY</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-54"></a>
<a name="line-55"></a><a name="zipWith3SY"></a><span class='hs-comment'>-- | The process constructor 'zipWith3SY' takes a combinational function as argument and returns a process with three input signals and one output signal.</span>
<a name="line-56"></a><span class='hs-definition'>zipWith3SY</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-keyglyph'>-&gt;</span> <span class='hs-varid'>d</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>c</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>d</span>
<a name="line-57"></a><span class='hs-definition'>zipWith3SY</span> <span class='hs-keyword'>_</span> <span class='hs-conid'>NullS</span>   <span class='hs-keyword'>_</span>       <span class='hs-keyword'>_</span>       <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NullS</span>
<a name="line-58"></a><span class='hs-definition'>zipWith3SY</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span>       <span class='hs-conid'>NullS</span>   <span class='hs-keyword'>_</span>       <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NullS</span>
<a name="line-59"></a><span class='hs-definition'>zipWith3SY</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span>       <span class='hs-keyword'>_</span>       <span class='hs-conid'>NullS</span>   <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NullS</span>
<a name="line-60"></a><span class='hs-definition'>zipWith3SY</span> <span class='hs-varid'>f</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-layout'>(</span><span class='hs-varid'>y</span><span class='hs-conop'>:-</span><span class='hs-varid'>ys</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>z</span><span class='hs-conop'>:-</span><span class='hs-varid'>zs</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-varid'>z</span> 
<a name="line-61"></a>				       <span class='hs-conop'>:-</span> <span class='hs-layout'>(</span><span class='hs-varid'>zipWith3SY</span> <span class='hs-varid'>f</span> <span class='hs-varid'>xs</span> <span class='hs-varid'>ys</span> <span class='hs-varid'>zs</span><span class='hs-layout'>)</span>
<a name="line-62"></a>
<a name="line-63"></a><a name="zipWith4SY"></a><span class='hs-comment'>-- | The process constructor 'zipWith4SY' takes a combinational function as argument and returns a process with four input signals and one output signal.</span>
<a name="line-64"></a><span class='hs-definition'>zipWith4SY</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-keyglyph'>-&gt;</span> <span class='hs-varid'>d</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>b</span> 
<a name="line-65"></a>		<span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>c</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>d</span>	<span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>e</span>
<a name="line-66"></a><span class='hs-definition'>zipWith4SY</span> <span class='hs-keyword'>_</span> <span class='hs-conid'>NullS</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'>NullS</span>
<a name="line-67"></a><span class='hs-definition'>zipWith4SY</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span>       <span class='hs-conid'>NullS</span>   <span class='hs-keyword'>_</span>       <span class='hs-keyword'>_</span>      <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NullS</span>
<a name="line-68"></a><span class='hs-definition'>zipWith4SY</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span>       <span class='hs-keyword'>_</span>       <span class='hs-conid'>NullS</span>   <span class='hs-keyword'>_</span>      <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NullS</span>
<a name="line-69"></a><span class='hs-definition'>zipWith4SY</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span>       <span class='hs-keyword'>_</span>       <span class='hs-keyword'>_</span>       <span class='hs-conid'>NullS</span>  <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NullS</span>
<a name="line-70"></a><span class='hs-definition'>zipWith4SY</span> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-varid'>w</span><span class='hs-conop'>:-</span><span class='hs-varid'>ws</span><span class='hs-layout'>)</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-layout'>(</span><span class='hs-varid'>y</span><span class='hs-conop'>:-</span><span class='hs-varid'>ys</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>z</span><span class='hs-conop'>:-</span><span class='hs-varid'>zs</span><span class='hs-layout'>)</span> 
<a name="line-71"></a>				      <span class='hs-keyglyph'>=</span> <span class='hs-varid'>f</span> <span class='hs-varid'>w</span> <span class='hs-varid'>x</span> <span class='hs-varid'>y</span> <span class='hs-varid'>z</span> 
<a name="line-72"></a>				        <span class='hs-conop'>:-</span> <span class='hs-layout'>(</span><span class='hs-varid'>zipWith4SY</span> <span class='hs-varid'>f</span> <span class='hs-varid'>ws</span> <span class='hs-varid'>xs</span> <span class='hs-varid'>ys</span> <span class='hs-varid'>zs</span><span class='hs-layout'>)</span>
<a name="line-73"></a>
<a name="line-74"></a><a name="mapxSY"></a><span class='hs-comment'>-- | The process constructor 'mapxSY' creates a process network that maps a function onto all signals in a vector of signals.</span>
<a name="line-75"></a><span class='hs-definition'>mapxSY</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-layout'>(</span><span class='hs-conid'>Signal</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-layout'>(</span><span class='hs-conid'>Signal</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span>
<a name="line-76"></a><span class='hs-definition'>mapxSY</span> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>mapV</span> <span class='hs-layout'>(</span><span class='hs-varid'>mapSY</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span>
<a name="line-77"></a>
<a name="line-78"></a><a name="zipWithxSY"></a><span class='hs-comment'>-- | The process constructor 'zipWithxSY' works as 'zipWithSY', but takes a vector of signals as input.</span>
<a name="line-79"></a><span class='hs-definition'>zipWithxSY</span>	<span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-conid'>Vector</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-layout'>(</span><span class='hs-conid'>Signal</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span>	<span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>b</span>
<a name="line-80"></a><span class='hs-definition'>zipWithxSY</span> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>mapSY</span> <span class='hs-varid'>f</span> <span class='hs-varop'>.</span> <span class='hs-varid'>zipxSY</span>
<a name="line-81"></a>
<a name="line-82"></a>
<a name="line-83"></a>
<a name="line-84"></a><span class='hs-comment'>-------------------------------------</span>
<a name="line-85"></a><span class='hs-comment'>--                                 --</span>
<a name="line-86"></a><span class='hs-comment'>-- SEQUENTIAL PROCESS CONSTRUCTORS --</span>
<a name="line-87"></a><span class='hs-comment'>--                                 --</span>
<a name="line-88"></a><span class='hs-comment'>-------------------------------------</span>
<a name="line-89"></a>
<a name="line-90"></a><a name="delaySY"></a><span class='hs-comment'>-- | The process constructor 'delaySY' delays the signal one event cycle </span>
<a name="line-91"></a><span class='hs-comment'>--   by introducing an initial value at the beginning of the output signal. </span>
<a name="line-92"></a><span class='hs-comment'>--   Note, that this implies that there is one event (the first) at the </span>
<a name="line-93"></a><span class='hs-comment'>--   output signal that has no corresponding event at the input signal. </span>
<a name="line-94"></a><span class='hs-comment'>--   One could argue that input and output signals are not fully synchronized,</span>
<a name="line-95"></a><span class='hs-comment'>--   even though all input events are synchronous with a corresponding output </span>
<a name="line-96"></a><span class='hs-comment'>--   event. However, this is necessary to initialize feed-back loops.</span>
<a name="line-97"></a><span class='hs-definition'>delaySY</span>	       <span class='hs-keyglyph'>::</span> <span class='hs-varid'>a</span> <span class='hs-comment'>-- ^Initial state </span>
<a name="line-98"></a>	       <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>a</span> <span class='hs-comment'>-- ^Input signal</span>
<a name="line-99"></a>	       <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>a</span> <span class='hs-comment'>-- ^Output signal</span>
<a name="line-100"></a><span class='hs-definition'>delaySY</span> <span class='hs-varid'>e</span> <span class='hs-varid'>es</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>e</span><span class='hs-conop'>:-</span><span class='hs-varid'>es</span>
<a name="line-101"></a>
<a name="line-102"></a><a name="delaynSY"></a><span class='hs-comment'>-- | The process constructor 'delaynSY' delays the signal n events by introducing n identical default values.   </span>
<a name="line-103"></a><span class='hs-definition'>delaynSY</span>       <span class='hs-keyglyph'>::</span> <span class='hs-varid'>a</span> <span class='hs-comment'>-- ^Initial state</span>
<a name="line-104"></a>	       <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Int</span> <span class='hs-comment'>-- ^ Delay cycles </span>
<a name="line-105"></a>	       <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>a</span> <span class='hs-comment'>-- ^Input signal</span>
<a name="line-106"></a>	       <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>a</span> <span class='hs-comment'>-- ^Output signal</span>
<a name="line-107"></a><span class='hs-definition'>delaynSY</span> <span class='hs-varid'>e</span> <span class='hs-varid'>n</span> <span class='hs-varid'>xs</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'>xs</span>
<a name="line-108"></a>                <span class='hs-keyglyph'>|</span> <span class='hs-varid'>otherwise</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>e</span> <span class='hs-conop'>:-</span> <span class='hs-varid'>delaynSY</span> <span class='hs-varid'>e</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'>xs</span> 
<a name="line-109"></a>
<a name="line-110"></a><a name="scanlSY"></a><span class='hs-comment'>-- | The process constructor 'scanlSY' is used to construct a finite state machine process without output decoder. It takes an initial value and a function for the next state decoder. The process constructor behaves similar to the Haskell prelude function 'scanlSY' and has the value of the new state as its output value as illustrated by the following example.  </span>
<a name="line-111"></a><span class='hs-comment'>--</span>
<a name="line-112"></a><span class='hs-comment'>-- &gt; SynchronousLib&gt; scanldSY (+) 0 (signal [1,2,3,4])</span>
<a name="line-113"></a><span class='hs-comment'>--</span>
<a name="line-114"></a><span class='hs-comment'>-- &gt; {1,3,6,10} :: Signal Integer</span>
<a name="line-115"></a><span class='hs-comment'>-- </span>
<a name="line-116"></a><span class='hs-comment'>-- This is in contrast to the function 'scanldSY', which has its current state as its output value. </span>
<a name="line-117"></a><span class='hs-definition'>scanlSY</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-comment'>-- ^Combinational function for next state decoder</span>
<a name="line-118"></a>	       <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>a</span> <span class='hs-comment'>-- ^Initial state</span>
<a name="line-119"></a>	       <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>b</span> <span class='hs-comment'>-- ^ Input signal </span>
<a name="line-120"></a>	       <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>a</span> <span class='hs-comment'>-- ^ Output signal</span>
<a name="line-121"></a><span class='hs-definition'>scanlSY</span> <span class='hs-varid'>f</span> <span class='hs-varid'>mem</span> <span class='hs-varid'>xs</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>s'</span>
<a name="line-122"></a>    <span class='hs-keyword'>where</span> <span class='hs-varid'>s'</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>zipWithSY</span> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-varid'>delaySY</span> <span class='hs-varid'>mem</span> <span class='hs-varid'>s'</span><span class='hs-layout'>)</span> <span class='hs-varid'>xs</span> 
<a name="line-123"></a>
<a name="line-124"></a><a name="scanl2SY"></a><span class='hs-comment'>-- | The process constructor 'scanl2SY' behaves like 'scanlSY', but has two input signals.</span>
<a name="line-125"></a><span class='hs-definition'>scanl2SY</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-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'>Signal</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>c</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>a</span>
<a name="line-126"></a><span class='hs-definition'>scanl2SY</span> <span class='hs-varid'>f</span> <span class='hs-varid'>mem</span> <span class='hs-varid'>xs</span> <span class='hs-varid'>ys</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>s'</span>
<a name="line-127"></a>    <span class='hs-keyword'>where</span> <span class='hs-varid'>s'</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>zipWith3SY</span> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-varid'>delaySY</span> <span class='hs-varid'>mem</span> <span class='hs-varid'>s'</span><span class='hs-layout'>)</span> <span class='hs-varid'>xs</span> <span class='hs-varid'>ys</span>
<a name="line-128"></a>
<a name="line-129"></a><a name="scanl3SY"></a><span class='hs-comment'>-- | The process constructor 'scanl3SY' behaves like 'scanlSY', but has three input signals.</span>
<a name="line-130"></a><span class='hs-definition'>scanl3SY</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-keyglyph'>-&gt;</span> <span class='hs-varid'>d</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'>Signal</span> <span class='hs-varid'>b</span> 
<a name="line-131"></a>	           <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>c</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>d</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>a</span>
<a name="line-132"></a><span class='hs-definition'>scanl3SY</span> <span class='hs-varid'>f</span> <span class='hs-varid'>mem</span> <span class='hs-varid'>xs</span> <span class='hs-varid'>ys</span> <span class='hs-varid'>zs</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>s'</span>
<a name="line-133"></a>    <span class='hs-keyword'>where</span> <span class='hs-varid'>s'</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>zipWith4SY</span> <span class='hs-varid'>f</span> <span class='hs-layout'>(</span><span class='hs-varid'>delaySY</span> <span class='hs-varid'>mem</span> <span class='hs-varid'>s'</span><span class='hs-layout'>)</span> <span class='hs-varid'>xs</span> <span class='hs-varid'>ys</span> <span class='hs-varid'>zs</span>
<a name="line-134"></a>
<a name="line-135"></a><a name="scanldSY"></a><span class='hs-comment'>-- | The process constructor 'scanldSY' is used to construct a finite state machine process without output decoder. It takes an initial value and a function for the next state decoder. The process constructor behaves similar to the Haskell prelude function 'scanlSY'. In contrast to the process constructor 'scanlSY' here the output value is the current state and not the one of the next state.</span>
<a name="line-136"></a><span class='hs-comment'>--</span>
<a name="line-137"></a><span class='hs-comment'>-- &gt; SynchronousLib&gt; scanlSY (+) 0 (signal [1,2,3,4])</span>
<a name="line-138"></a><span class='hs-comment'>--</span>
<a name="line-139"></a><span class='hs-comment'>-- &gt; {0,1,3,6} :: Signal Integer</span>
<a name="line-140"></a><span class='hs-definition'>scanldSY</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-comment'>-- ^Combinational function for next state decoder</span>
<a name="line-141"></a>	       <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>a</span> <span class='hs-comment'>-- ^Initial state</span>
<a name="line-142"></a>	       <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>b</span> <span class='hs-comment'>-- ^ Input signal </span>
<a name="line-143"></a>	       <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>a</span> <span class='hs-comment'>-- ^ Output signal</span>
<a name="line-144"></a><span class='hs-definition'>scanldSY</span> <span class='hs-varid'>f</span> <span class='hs-varid'>mem</span> <span class='hs-varid'>xs</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>s'</span>
<a name="line-145"></a>    <span class='hs-keyword'>where</span> <span class='hs-varid'>s'</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>delaySY</span> <span class='hs-varid'>mem</span> <span class='hs-varop'>$</span> <span class='hs-varid'>zipWithSY</span> <span class='hs-varid'>f</span> <span class='hs-varid'>s'</span> <span class='hs-varid'>xs</span> 
<a name="line-146"></a>
<a name="line-147"></a>
<a name="line-148"></a><a name="scanld2SY"></a><span class='hs-comment'>-- | The process constructor 'scanld2SY' behaves like 'scanldSY', but has two input signals.</span>
<a name="line-149"></a><span class='hs-definition'>scanld2SY</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-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'>Signal</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>c</span> 
<a name="line-150"></a>		   <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>a</span>
<a name="line-151"></a><span class='hs-definition'>scanld2SY</span> <span class='hs-varid'>f</span> <span class='hs-varid'>mem</span> <span class='hs-varid'>xs</span> <span class='hs-varid'>ys</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>s'</span>
<a name="line-152"></a>    <span class='hs-keyword'>where</span> <span class='hs-varid'>s'</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>delaySY</span> <span class='hs-varid'>mem</span> <span class='hs-varop'>$</span> <span class='hs-varid'>zipWith3SY</span> <span class='hs-varid'>f</span> <span class='hs-varid'>s'</span> <span class='hs-varid'>xs</span> <span class='hs-varid'>ys</span>
<a name="line-153"></a>
<a name="line-154"></a><a name="scanld3SY"></a><span class='hs-comment'>-- | The process constructor 'scanld3SY' behaves like 'scanldSY', but has three input signals.</span>
<a name="line-155"></a><span class='hs-definition'>scanld3SY</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-keyglyph'>-&gt;</span> <span class='hs-varid'>d</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'>Signal</span> <span class='hs-varid'>b</span> 
<a name="line-156"></a>		   <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>c</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>d</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>a</span>
<a name="line-157"></a><span class='hs-definition'>scanld3SY</span> <span class='hs-varid'>f</span> <span class='hs-varid'>mem</span> <span class='hs-varid'>xs</span> <span class='hs-varid'>ys</span> <span class='hs-varid'>zs</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>s'</span>
<a name="line-158"></a>    <span class='hs-keyword'>where</span> <span class='hs-varid'>s'</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>delaySY</span> <span class='hs-varid'>mem</span> <span class='hs-varop'>$</span> <span class='hs-varid'>zipWith4SY</span> <span class='hs-varid'>f</span> <span class='hs-varid'>s'</span> <span class='hs-varid'>xs</span> <span class='hs-varid'>ys</span> <span class='hs-varid'>zs</span>
<a name="line-159"></a>
<a name="line-160"></a><a name="mooreSY"></a><span class='hs-comment'>-- | The process constructor 'mooreSY' is used to model state machines of \"Moore\" type, where the output only depends on the current state. The process constructor is based on the process constructor 'scanldSY', since it is natural for state machines in hardware, that the output operates on the current state and not on the next state. The process constructors takes a function to calculate the next state, another function to calculate the output and a value for the initial state. </span>
<a name="line-161"></a><span class='hs-comment'>--</span>
<a name="line-162"></a><span class='hs-comment'>-- In contrast the output of a process created by the process constructor 'mealySY' depends not only on the state, but also on the input values.</span>
<a name="line-163"></a><span class='hs-definition'>mooreSY</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-comment'>-- ^Combinational function for next state decoder </span>
<a name="line-164"></a>	       <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>c</span><span class='hs-layout'>)</span> <span class='hs-comment'>-- ^Combinational function for output decoder</span>
<a name="line-165"></a>	       <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>a</span> <span class='hs-comment'>-- ^Initial state</span>
<a name="line-166"></a>	       <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>b</span> <span class='hs-comment'>-- ^Input signal</span>
<a name="line-167"></a>	       <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>c</span> <span class='hs-comment'>-- ^Output signal</span>
<a name="line-168"></a><span class='hs-definition'>mooreSY</span> <span class='hs-varid'>nextState</span> <span class='hs-varid'>output</span> <span class='hs-varid'>initial</span> 
<a name="line-169"></a>        <span class='hs-keyglyph'>=</span> <span class='hs-varid'>mapSY</span> <span class='hs-varid'>output</span> <span class='hs-varop'>.</span> <span class='hs-layout'>(</span><span class='hs-varid'>scanldSY</span> <span class='hs-varid'>nextState</span> <span class='hs-varid'>initial</span><span class='hs-layout'>)</span>
<a name="line-170"></a>
<a name="line-171"></a><a name="moore2SY"></a><span class='hs-comment'>-- | The process constructor 'moore2SY' behaves like 'mooreSY', but has two input signals.</span>
<a name="line-172"></a><span class='hs-definition'>moore2SY</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-keyglyph'>-&gt;</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>d</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'>Signal</span> <span class='hs-varid'>b</span> 
<a name="line-173"></a>	           <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>c</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>d</span>
<a name="line-174"></a><span class='hs-definition'>moore2SY</span> <span class='hs-varid'>nextState</span> <span class='hs-varid'>output</span> <span class='hs-varid'>initial</span> <span class='hs-varid'>inp1</span> <span class='hs-varid'>inp2</span> <span class='hs-keyglyph'>=</span>
<a name="line-175"></a> 	 <span class='hs-varid'>mapSY</span> <span class='hs-varid'>output</span> <span class='hs-layout'>(</span><span class='hs-varid'>scanld2SY</span> <span class='hs-varid'>nextState</span> <span class='hs-varid'>initial</span> <span class='hs-varid'>inp1</span> <span class='hs-varid'>inp2</span><span class='hs-layout'>)</span>
<a name="line-176"></a>
<a name="line-177"></a><a name="moore3SY"></a><span class='hs-comment'>-- | The process constructor 'moore3SY' behaves like 'mooreSY', but has three input signals.</span>
<a name="line-178"></a><span class='hs-definition'>moore3SY</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-keyglyph'>-&gt;</span> <span class='hs-varid'>d</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-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>e</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'>Signal</span> <span class='hs-varid'>b</span> 
<a name="line-179"></a>		   <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>c</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>d</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>e</span>
<a name="line-180"></a><span class='hs-definition'>moore3SY</span> <span class='hs-varid'>nextState</span> <span class='hs-varid'>output</span> <span class='hs-varid'>initial</span> <span class='hs-varid'>inp1</span> <span class='hs-varid'>inp2</span> <span class='hs-varid'>inp3</span> <span class='hs-keyglyph'>=</span>
<a name="line-181"></a> 	 <span class='hs-varid'>mapSY</span> <span class='hs-varid'>output</span> <span class='hs-layout'>(</span><span class='hs-varid'>scanld3SY</span> <span class='hs-varid'>nextState</span> <span class='hs-varid'>initial</span> <span class='hs-varid'>inp1</span> <span class='hs-varid'>inp2</span> <span class='hs-varid'>inp3</span><span class='hs-layout'>)</span>
<a name="line-182"></a>
<a name="line-183"></a><a name="mealySY"></a><span class='hs-comment'>-- | The process constructor 'melaySY' is used to model state machines of \"Mealy\" type, where the output only depends on the current state and the input values. The process constructor is based on the process constructor 'scanldSY', since it is natural for state machines in hardware, that the output operates on the current state and not on the next state. The process constructors takes a function to calculate the next state, another function to calculate the output and a value for the initial state. </span>
<a name="line-184"></a><span class='hs-comment'>--</span>
<a name="line-185"></a><span class='hs-comment'>-- In contrast the output of a process created by the process constructor 'mooreSY' depends only on the state, but not on the input values.</span>
<a name="line-186"></a><span class='hs-definition'>mealySY</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-comment'>-- ^Combinational function for next state decoder  </span>
<a name="line-187"></a>	       <span class='hs-keyglyph'>-&gt;</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-comment'>-- ^Combinational function for output decoder</span>
<a name="line-188"></a>	       <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>a</span> <span class='hs-comment'>-- ^Initial state</span>
<a name="line-189"></a>	       <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>b</span> <span class='hs-comment'>-- ^Input signal </span>
<a name="line-190"></a>	       <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>c</span> <span class='hs-comment'>-- ^Output signal</span>
<a name="line-191"></a><span class='hs-definition'>mealySY</span> <span class='hs-varid'>nextState</span> <span class='hs-varid'>output</span> <span class='hs-varid'>initial</span> <span class='hs-varid'>sig</span> <span class='hs-keyglyph'>=</span>
<a name="line-192"></a>        <span class='hs-varid'>zipWithSY</span> <span class='hs-varid'>output</span> <span class='hs-varid'>state</span> <span class='hs-varid'>sig</span>
<a name="line-193"></a>        <span class='hs-keyword'>where</span> <span class='hs-varid'>state</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>scanldSY</span> <span class='hs-varid'>nextState</span> <span class='hs-varid'>initial</span> <span class='hs-varid'>sig</span>
<a name="line-194"></a>
<a name="line-195"></a><a name="mealy2SY"></a><span class='hs-comment'>-- | The process constructor 'mealy2SY' behaves like 'mealySY', but has two input signals.</span>
<a name="line-196"></a><span class='hs-definition'>mealy2SY</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-keyglyph'>-&gt;</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</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-keyglyph'>-&gt;</span> <span class='hs-varid'>d</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>a</span> 
<a name="line-197"></a>	           <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>c</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>d</span>
<a name="line-198"></a><span class='hs-definition'>mealy2SY</span> <span class='hs-varid'>nextState</span> <span class='hs-varid'>output</span> <span class='hs-varid'>initial</span> <span class='hs-varid'>inp1</span> <span class='hs-varid'>inp2</span> <span class='hs-keyglyph'>=</span>
<a name="line-199"></a> 	<span class='hs-varid'>zipWith3SY</span> <span class='hs-varid'>output</span> <span class='hs-layout'>(</span><span class='hs-varid'>scanld2SY</span> <span class='hs-varid'>nextState</span> <span class='hs-varid'>initial</span> <span class='hs-varid'>inp1</span> <span class='hs-varid'>inp2</span><span class='hs-layout'>)</span>
<a name="line-200"></a>	                  <span class='hs-varid'>inp1</span> <span class='hs-varid'>inp2</span>      
<a name="line-201"></a>
<a name="line-202"></a><a name="mealy3SY"></a><span class='hs-comment'>-- | The process constructor 'mealy3SY' behaves like 'mealySY', but has three input signals.</span>
<a name="line-203"></a><span class='hs-definition'>mealy3SY</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-keyglyph'>-&gt;</span> <span class='hs-varid'>d</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-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-keyglyph'>-&gt;</span> <span class='hs-varid'>d</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>a</span> 
<a name="line-204"></a>	           <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>c</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>d</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>e</span>
<a name="line-205"></a><span class='hs-definition'>mealy3SY</span> <span class='hs-varid'>nextState</span> <span class='hs-varid'>output</span> <span class='hs-varid'>initial</span> <span class='hs-varid'>inp1</span> <span class='hs-varid'>inp2</span> <span class='hs-varid'>inp3</span> <span class='hs-keyglyph'>=</span>
<a name="line-206"></a>        <span class='hs-varid'>zipWith4SY</span> <span class='hs-varid'>output</span> <span class='hs-layout'>(</span><span class='hs-varid'>scanld3SY</span> <span class='hs-varid'>nextState</span> <span class='hs-varid'>initial</span> <span class='hs-varid'>inp1</span> <span class='hs-varid'>inp2</span> <span class='hs-varid'>inp3</span><span class='hs-layout'>)</span>
<a name="line-207"></a>		         <span class='hs-varid'>inp1</span> <span class='hs-varid'>inp2</span> <span class='hs-varid'>inp3</span> 
<a name="line-208"></a>
<a name="line-209"></a><a name="filterSY"></a><span class='hs-comment'>-- | The process constructor 'filterSY' discards the values who do not fulfill a predicate given by a predicate function and replaces them with absent events.</span>
<a name="line-210"></a><span class='hs-definition'>filterSY</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-comment'>-- Predicate function</span>
<a name="line-211"></a>		  <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>a</span> <span class='hs-comment'>-- Input signal</span>
<a name="line-212"></a>		  <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-layout'>(</span><span class='hs-conid'>AbstExt</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-comment'>-- Output signal</span>
<a name="line-213"></a><span class='hs-definition'>filterSY</span> <span class='hs-keyword'>_</span> <span class='hs-conid'>NullS</span>	<span class='hs-keyglyph'>=</span> <span class='hs-conid'>NullS</span>
<a name="line-214"></a><span class='hs-definition'>filterSY</span> <span class='hs-varid'>p</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-keyword'>if</span> <span class='hs-layout'>(</span><span class='hs-varid'>p</span> <span class='hs-varid'>x</span> <span class='hs-varop'>==</span> <span class='hs-conid'>True</span><span class='hs-layout'>)</span> <span class='hs-keyword'>then</span>
<a name="line-215"></a>			     <span class='hs-conid'>Prst</span> <span class='hs-varid'>x</span> <span class='hs-conop'>:-</span> <span class='hs-varid'>filterSY</span> <span class='hs-varid'>p</span> <span class='hs-varid'>xs</span>
<a name="line-216"></a>			  <span class='hs-keyword'>else</span>
<a name="line-217"></a>			     <span class='hs-conid'>Abst</span> <span class='hs-conop'>:-</span> <span class='hs-varid'>filterSY</span> <span class='hs-varid'>p</span> <span class='hs-varid'>xs</span>	
<a name="line-218"></a>
<a name="line-219"></a><a name="sourceSY"></a><span class='hs-comment'>-- | The process 'sourceSY' takes a function and an initial state and generates an infinite signal starting with the initial state as first output followed by the recursive application of the function on the current state. The state also serves as output value. </span>
<a name="line-220"></a><span class='hs-comment'>--</span>
<a name="line-221"></a><span class='hs-comment'>-- The process that has the infinite signal of natural numbers as output is constructed by </span>
<a name="line-222"></a><span class='hs-comment'>--</span>
<a name="line-223"></a><span class='hs-comment'>-- &gt; SynchronousLib&gt; takeS 5 (sourceSY (+1) 0)</span>
<a name="line-224"></a><span class='hs-comment'>--</span>
<a name="line-225"></a><span class='hs-comment'>-- &gt; {0,1,2,3,4} :: Signal Integer</span>
<a name="line-226"></a><span class='hs-definition'>sourceSY</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'>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'>Signal</span> <span class='hs-varid'>a</span>
<a name="line-227"></a><span class='hs-definition'>sourceSY</span> <span class='hs-varid'>f</span> <span class='hs-varid'>s0</span>		<span class='hs-keyglyph'>=</span> <span class='hs-varid'>o</span>
<a name="line-228"></a>  <span class='hs-keyword'>where</span> 
<a name="line-229"></a>    <span class='hs-varid'>o</span>			<span class='hs-keyglyph'>=</span> <span class='hs-varid'>delaySY</span> <span class='hs-varid'>s0</span> <span class='hs-varid'>s</span>
<a name="line-230"></a>    <span class='hs-varid'>s</span>			<span class='hs-keyglyph'>=</span> <span class='hs-varid'>mapSY</span> <span class='hs-varid'>f</span> <span class='hs-varid'>o</span>
<a name="line-231"></a>
<a name="line-232"></a><a name="fillSY"></a><span class='hs-comment'>-- | The process constructor 'fillSY' creates a process that 'fills' a signal with present values by replacing absent values with a given value. The output signal is not any more of the type 'AbstExt'.</span>
<a name="line-233"></a><span class='hs-definition'>fillSY</span>	     <span class='hs-keyglyph'>::</span> <span class='hs-varid'>a</span> <span class='hs-comment'>-- ^Default value  </span>
<a name="line-234"></a>	     <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-layout'>(</span><span class='hs-conid'>AbstExt</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-comment'>-- ^Absent extended input signal </span>
<a name="line-235"></a>	     <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>a</span> <span class='hs-comment'>-- ^Output signal</span>
<a name="line-236"></a><span class='hs-definition'>fillSY</span> <span class='hs-varid'>a</span> <span class='hs-varid'>xs</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>mapSY</span> <span class='hs-layout'>(</span><span class='hs-varid'>replaceAbst</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-varid'>xs</span>
<a name="line-237"></a>              <span class='hs-keyword'>where</span> <span class='hs-varid'>replaceAbst</span> <span class='hs-varid'>a'</span> <span class='hs-conid'>Abst</span>     <span class='hs-keyglyph'>=</span> <span class='hs-varid'>a'</span>
<a name="line-238"></a>                    <span class='hs-varid'>replaceAbst</span> <span class='hs-keyword'>_</span>  <span class='hs-layout'>(</span><span class='hs-conid'>Prst</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-239"></a>
<a name="line-240"></a><a name="holdSY"></a><span class='hs-comment'>-- | The process constructor 'holdSY' creates a process that 'fills' a signal with values by replacing absent values by the preceding present value. Only in cases, where no preceding value exists, the absent value is replaced by a default value. The output signal is not any more of the type 'AbstExt'.</span>
<a name="line-241"></a><span class='hs-definition'>holdSY</span>       <span class='hs-keyglyph'>::</span> <span class='hs-varid'>a</span> <span class='hs-comment'>-- ^Default value </span>
<a name="line-242"></a>	     <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-layout'>(</span><span class='hs-conid'>AbstExt</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-comment'>-- ^Absent extended input signal </span>
<a name="line-243"></a>	     <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>a</span> <span class='hs-comment'>-- ^Output signal</span>
<a name="line-244"></a><span class='hs-definition'>holdSY</span> <span class='hs-varid'>a</span> <span class='hs-varid'>xs</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>scanlSY</span> <span class='hs-varid'>hold</span> <span class='hs-varid'>a</span> <span class='hs-varid'>xs</span>
<a name="line-245"></a>   	      <span class='hs-keyword'>where</span> <span class='hs-varid'>hold</span> <span class='hs-varid'>a'</span> <span class='hs-conid'>Abst</span>     <span class='hs-keyglyph'>=</span> <span class='hs-varid'>a'</span>
<a name="line-246"></a> 		    <span class='hs-varid'>hold</span> <span class='hs-keyword'>_</span>  <span class='hs-layout'>(</span><span class='hs-conid'>Prst</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-247"></a>
<a name="line-248"></a>
<a name="line-249"></a>
<a name="line-250"></a><span class='hs-comment'>---------------------------</span>
<a name="line-251"></a><span class='hs-comment'>--                       --</span>
<a name="line-252"></a><span class='hs-comment'>-- SYNCHRONOUS PROCESSES --</span>
<a name="line-253"></a><span class='hs-comment'>--                       --</span>
<a name="line-254"></a><span class='hs-comment'>---------------------------</span>
<a name="line-255"></a>
<a name="line-256"></a><a name="whenSY"></a><span class='hs-comment'>-- | The process constructor 'whenSY' creates a process that synchronizes a signal of absent extended values with another signal of absent extended values. The output signal has the value of the first signal whenever an event has a present value and 'Abst' when the event has an absent value.</span>
<a name="line-257"></a><span class='hs-definition'>whenSY</span>	     <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Signal</span> <span class='hs-layout'>(</span><span class='hs-conid'>AbstExt</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-layout'>(</span><span class='hs-conid'>AbstExt</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span> 
<a name="line-258"></a>		<span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-layout'>(</span><span class='hs-conid'>AbstExt</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span>
<a name="line-259"></a><span class='hs-definition'>whenSY</span> <span class='hs-conid'>NullS</span>   <span class='hs-keyword'>_</span>            <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NullS</span>
<a name="line-260"></a><span class='hs-definition'>whenSY</span> <span class='hs-keyword'>_</span>       <span class='hs-conid'>NullS</span>        <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NullS</span>
<a name="line-261"></a><span class='hs-definition'>whenSY</span> <span class='hs-layout'>(</span><span class='hs-keyword'>_</span><span class='hs-conop'>:-</span><span class='hs-varid'>xs</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-conid'>Abst</span><span class='hs-conop'>:-</span><span class='hs-varid'>ys</span><span class='hs-layout'>)</span>   <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Abst</span> <span class='hs-conop'>:-</span> <span class='hs-layout'>(</span><span class='hs-varid'>whenSY</span> <span class='hs-varid'>xs</span> <span class='hs-varid'>ys</span><span class='hs-layout'>)</span>
<a name="line-262"></a><span class='hs-definition'>whenSY</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-layout'>(</span><span class='hs-keyword'>_</span><span class='hs-conop'>:-</span><span class='hs-varid'>ys</span><span class='hs-layout'>)</span>      <span class='hs-keyglyph'>=</span> <span class='hs-varid'>x</span>    <span class='hs-conop'>:-</span> <span class='hs-layout'>(</span><span class='hs-varid'>whenSY</span> <span class='hs-varid'>xs</span> <span class='hs-varid'>ys</span><span class='hs-layout'>)</span>
<a name="line-263"></a>
<a name="line-264"></a><a name="zipSY"></a><span class='hs-comment'>-- | The process 'zipSY' \"zips\" two incoming signals into one signal of tuples.</span>
<a name="line-265"></a><span class='hs-definition'>zipSY</span>        <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</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-266"></a><span class='hs-definition'>zipSY</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-layout'>(</span><span class='hs-varid'>y</span><span class='hs-conop'>:-</span><span class='hs-varid'>ys</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-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'>:-</span> <span class='hs-varid'>zipSY</span> <span class='hs-varid'>xs</span> <span class='hs-varid'>ys</span>
<a name="line-267"></a><span class='hs-definition'>zipSY</span> <span class='hs-keyword'>_</span>	     <span class='hs-keyword'>_</span>	     <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NullS</span>
<a name="line-268"></a>
<a name="line-269"></a><a name="zip3SY"></a><span class='hs-comment'>-- | The process 'zip3SY' works as 'zipSY', but takes three input signals.</span>
<a name="line-270"></a><span class='hs-definition'>zip3SY</span>       <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>c</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</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-varid'>c</span><span class='hs-layout'>)</span>
<a name="line-271"></a><span class='hs-definition'>zip3SY</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-layout'>(</span><span class='hs-varid'>y</span><span class='hs-conop'>:-</span><span class='hs-varid'>ys</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>z</span><span class='hs-conop'>:-</span><span class='hs-varid'>zs</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-varid'>z</span><span class='hs-layout'>)</span> <span class='hs-conop'>:-</span> <span class='hs-varid'>zip3SY</span> <span class='hs-varid'>xs</span> <span class='hs-varid'>ys</span> <span class='hs-varid'>zs</span>
<a name="line-272"></a><span class='hs-definition'>zip3SY</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'>NullS</span>
<a name="line-273"></a>
<a name="line-274"></a><a name="zip4SY"></a><span class='hs-comment'>-- | The process 'zip4SY' works as 'zipSY', but takes four input signals.</span>
<a name="line-275"></a><span class='hs-definition'>zip4SY</span>	     <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>c</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>d</span> 
<a name="line-276"></a>		<span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</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-varid'>c</span><span class='hs-layout'>,</span><span class='hs-varid'>d</span><span class='hs-layout'>)</span>
<a name="line-277"></a><span class='hs-definition'>zip4SY</span> <span class='hs-layout'>(</span><span class='hs-varid'>w</span><span class='hs-conop'>:-</span><span class='hs-varid'>ws</span><span class='hs-layout'>)</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-layout'>(</span><span class='hs-varid'>y</span><span class='hs-conop'>:-</span><span class='hs-varid'>ys</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>z</span><span class='hs-conop'>:-</span><span class='hs-varid'>zs</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-varid'>w</span><span class='hs-layout'>,</span> <span class='hs-varid'>x</span><span class='hs-layout'>,</span> <span class='hs-varid'>y</span><span class='hs-layout'>,</span> <span class='hs-varid'>z</span><span class='hs-layout'>)</span> 
<a name="line-278"></a>					 <span class='hs-conop'>:-</span> <span class='hs-varid'>zip4SY</span> <span class='hs-varid'>ws</span> <span class='hs-varid'>xs</span> <span class='hs-varid'>ys</span> <span class='hs-varid'>zs</span>
<a name="line-279"></a><span class='hs-definition'>zip4SY</span> <span class='hs-keyword'>_</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'>NullS</span>
<a name="line-280"></a>
<a name="line-281"></a><a name="zip5SY"></a><span class='hs-comment'>-- | The process 'zip5SY' works as 'zipSY', but takes four input signals.</span>
<a name="line-282"></a><span class='hs-definition'>zip5SY</span>	     <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>c</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>d</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>e</span>
<a name="line-283"></a>		<span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</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-varid'>c</span><span class='hs-layout'>,</span><span class='hs-varid'>d</span><span class='hs-layout'>,</span><span class='hs-varid'>e</span><span class='hs-layout'>)</span>
<a name="line-284"></a><span class='hs-definition'>zip5SY</span> <span class='hs-layout'>(</span><span class='hs-varid'>x1</span><span class='hs-conop'>:-</span><span class='hs-varid'>x1s</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>x2</span><span class='hs-conop'>:-</span><span class='hs-varid'>x2s</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>x3</span><span class='hs-conop'>:-</span><span class='hs-varid'>x3s</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>x4</span><span class='hs-conop'>:-</span><span class='hs-varid'>x4s</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>x5</span><span class='hs-conop'>:-</span><span class='hs-varid'>x5s</span><span class='hs-layout'>)</span> 
<a name="line-285"></a>    <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-varid'>x1</span><span class='hs-layout'>,</span><span class='hs-varid'>x2</span><span class='hs-layout'>,</span><span class='hs-varid'>x3</span><span class='hs-layout'>,</span><span class='hs-varid'>x4</span><span class='hs-layout'>,</span><span class='hs-varid'>x5</span><span class='hs-layout'>)</span> <span class='hs-conop'>:-</span> <span class='hs-varid'>zip5SY</span> <span class='hs-varid'>x1s</span> <span class='hs-varid'>x2s</span> <span class='hs-varid'>x3s</span> <span class='hs-varid'>x4s</span> <span class='hs-varid'>x5s</span>
<a name="line-286"></a><span class='hs-definition'>zip5SY</span> <span class='hs-keyword'>_</span>	 <span class='hs-keyword'>_</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'>NullS</span>
<a name="line-287"></a>
<a name="line-288"></a><a name="zip6SY"></a><span class='hs-comment'>-- | The process 'zip6SY' works as 'zipSY', but takes four input signals.</span>
<a name="line-289"></a><span class='hs-definition'>zip6SY</span>	     <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>b</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>c</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>d</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>e</span>
<a name="line-290"></a>             <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>f</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</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-varid'>c</span><span class='hs-layout'>,</span><span class='hs-varid'>d</span><span class='hs-layout'>,</span><span class='hs-varid'>e</span><span class='hs-layout'>,</span><span class='hs-varid'>f</span><span class='hs-layout'>)</span>
<a name="line-291"></a><span class='hs-definition'>zip6SY</span> <span class='hs-layout'>(</span><span class='hs-varid'>x1</span><span class='hs-conop'>:-</span><span class='hs-varid'>x1s</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>x2</span><span class='hs-conop'>:-</span><span class='hs-varid'>x2s</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>x3</span><span class='hs-conop'>:-</span><span class='hs-varid'>x3s</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>x4</span><span class='hs-conop'>:-</span><span class='hs-varid'>x4s</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>x5</span><span class='hs-conop'>:-</span><span class='hs-varid'>x5s</span><span class='hs-layout'>)</span>  <span class='hs-layout'>(</span><span class='hs-varid'>x6</span><span class='hs-conop'>:-</span><span class='hs-varid'>x6s</span><span class='hs-layout'>)</span> 
<a name="line-292"></a>    <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-varid'>x1</span><span class='hs-layout'>,</span><span class='hs-varid'>x2</span><span class='hs-layout'>,</span><span class='hs-varid'>x3</span><span class='hs-layout'>,</span><span class='hs-varid'>x4</span><span class='hs-layout'>,</span><span class='hs-varid'>x5</span><span class='hs-layout'>,</span><span class='hs-varid'>x6</span><span class='hs-layout'>)</span> <span class='hs-conop'>:-</span> <span class='hs-varid'>zip6SY</span> <span class='hs-varid'>x1s</span> <span class='hs-varid'>x2s</span> <span class='hs-varid'>x3s</span> <span class='hs-varid'>x4s</span> <span class='hs-varid'>x5s</span> <span class='hs-varid'>x6s</span>
<a name="line-293"></a><span class='hs-definition'>zip6SY</span> <span class='hs-keyword'>_</span>	 <span class='hs-keyword'>_</span>         <span class='hs-keyword'>_</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'>NullS</span>
<a name="line-294"></a>
<a name="line-295"></a><a name="unzipSY"></a><span class='hs-comment'>-- | The process 'unzipSY' \"unzips\" a signal of tuples into two signals.</span>
<a name="line-296"></a><span class='hs-definition'>unzipSY</span>      <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Signal</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'>Signal</span> <span class='hs-varid'>a</span><span class='hs-layout'>,</span><span class='hs-conid'>Signal</span> <span class='hs-varid'>b</span><span class='hs-layout'>)</span>
<a name="line-297"></a><span class='hs-definition'>unzipSY</span> <span class='hs-conid'>NullS</span>	     <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-conid'>NullS</span><span class='hs-layout'>,</span> <span class='hs-conid'>NullS</span><span class='hs-layout'>)</span>
<a name="line-298"></a><span class='hs-definition'>unzipSY</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'>:-</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'>:-</span><span class='hs-varid'>xs</span><span class='hs-layout'>,</span> <span class='hs-varid'>y</span><span class='hs-conop'>:-</span><span class='hs-varid'>ys</span><span class='hs-layout'>)</span> <span class='hs-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'>unzipSY</span> <span class='hs-varid'>xys</span>
<a name="line-299"></a>
<a name="line-300"></a><a name="unzip3SY"></a><span class='hs-comment'>-- | The process 'unzip3SY' works as 'unzipSY', but has three output signals.</span>
<a name="line-301"></a><span class='hs-definition'>unzip3SY</span>     <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Signal</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-varid'>c</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-conid'>Signal</span> <span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>b</span><span class='hs-layout'>,</span> <span class='hs-conid'>Signal</span> <span class='hs-varid'>c</span><span class='hs-layout'>)</span>
<a name="line-302"></a><span class='hs-definition'>unzip3SY</span> <span class='hs-conid'>NullS</span>             <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-conid'>NullS</span><span class='hs-layout'>,</span> <span class='hs-conid'>NullS</span><span class='hs-layout'>,</span> <span class='hs-conid'>NullS</span><span class='hs-layout'>)</span>
<a name="line-303"></a><span class='hs-definition'>unzip3SY</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-varid'>z</span><span class='hs-layout'>)</span><span class='hs-conop'>:-</span><span class='hs-varid'>xyzs</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'>:-</span><span class='hs-varid'>xs</span><span class='hs-layout'>,</span> <span class='hs-varid'>y</span><span class='hs-conop'>:-</span><span class='hs-varid'>ys</span><span class='hs-layout'>,</span> <span class='hs-varid'>z</span><span class='hs-conop'>:-</span><span class='hs-varid'>zs</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-304"></a>  			     <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-varid'>zs</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>unzip3SY</span> <span class='hs-varid'>xyzs</span>
<a name="line-305"></a>
<a name="line-306"></a><a name="unzip4SY"></a><span class='hs-comment'>-- | The process 'unzip4SY' works as 'unzipSY', but has four output signals.</span>
<a name="line-307"></a><span class='hs-definition'>unzip4SY</span>     <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Signal</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-varid'>c</span><span class='hs-layout'>,</span><span class='hs-varid'>d</span><span class='hs-layout'>)</span> 
<a name="line-308"></a>		<span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-conid'>Signal</span> <span class='hs-varid'>a</span><span class='hs-layout'>,</span><span class='hs-conid'>Signal</span> <span class='hs-varid'>b</span><span class='hs-layout'>,</span><span class='hs-conid'>Signal</span> <span class='hs-varid'>c</span><span class='hs-layout'>,</span><span class='hs-conid'>Signal</span> <span class='hs-varid'>d</span><span class='hs-layout'>)</span>
<a name="line-309"></a><span class='hs-definition'>unzip4SY</span> <span class='hs-conid'>NullS</span>              <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-conid'>NullS</span><span class='hs-layout'>,</span> <span class='hs-conid'>NullS</span><span class='hs-layout'>,</span> <span class='hs-conid'>NullS</span><span class='hs-layout'>,</span> <span class='hs-conid'>NullS</span><span class='hs-layout'>)</span>
<a name="line-310"></a><span class='hs-definition'>unzip4SY</span> <span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-varid'>w</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-varid'>z</span><span class='hs-layout'>)</span><span class='hs-conop'>:-</span><span class='hs-varid'>wxyzs</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-varid'>w</span><span class='hs-conop'>:-</span><span class='hs-varid'>ws</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-varid'>y</span><span class='hs-conop'>:-</span><span class='hs-varid'>ys</span><span class='hs-layout'>,</span> <span class='hs-varid'>z</span><span class='hs-conop'>:-</span><span class='hs-varid'>zs</span><span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-311"></a>  			      <span class='hs-layout'>(</span><span class='hs-varid'>ws</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-varid'>zs</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>unzip4SY</span> <span class='hs-varid'>wxyzs</span>
<a name="line-312"></a>
<a name="line-313"></a><a name="unzip5SY"></a><span class='hs-comment'>-- | The process 'unzip5SY' works as 'unzipSY', but has four output signals.</span>
<a name="line-314"></a><span class='hs-definition'>unzip5SY</span>     <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Signal</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-varid'>c</span><span class='hs-layout'>,</span><span class='hs-varid'>d</span><span class='hs-layout'>,</span><span class='hs-varid'>e</span><span class='hs-layout'>)</span> 
<a name="line-315"></a>		<span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-conid'>Signal</span> <span class='hs-varid'>a</span><span class='hs-layout'>,</span><span class='hs-conid'>Signal</span> <span class='hs-varid'>b</span><span class='hs-layout'>,</span><span class='hs-conid'>Signal</span> <span class='hs-varid'>c</span><span class='hs-layout'>,</span><span class='hs-conid'>Signal</span> <span class='hs-varid'>d</span><span class='hs-layout'>,</span><span class='hs-conid'>Signal</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span>
<a name="line-316"></a><span class='hs-definition'>unzip5SY</span> <span class='hs-conid'>NullS</span>              <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-conid'>NullS</span><span class='hs-layout'>,</span> <span class='hs-conid'>NullS</span><span class='hs-layout'>,</span> <span class='hs-conid'>NullS</span><span class='hs-layout'>,</span> <span class='hs-conid'>NullS</span><span class='hs-layout'>,</span><span class='hs-conid'>NullS</span><span class='hs-layout'>)</span>
<a name="line-317"></a><span class='hs-definition'>unzip5SY</span> <span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-varid'>x1</span><span class='hs-layout'>,</span><span class='hs-varid'>x2</span><span class='hs-layout'>,</span><span class='hs-varid'>x3</span><span class='hs-layout'>,</span><span class='hs-varid'>x4</span><span class='hs-layout'>,</span><span class='hs-varid'>x5</span><span class='hs-layout'>)</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-layout'>(</span><span class='hs-varid'>x1</span><span class='hs-conop'>:-</span><span class='hs-varid'>x1s</span><span class='hs-layout'>,</span> <span class='hs-varid'>x2</span><span class='hs-conop'>:-</span><span class='hs-varid'>x2s</span><span class='hs-layout'>,</span> <span class='hs-varid'>x3</span><span class='hs-conop'>:-</span><span class='hs-varid'>x3s</span><span class='hs-layout'>,</span> <span class='hs-varid'>x4</span><span class='hs-conop'>:-</span><span class='hs-varid'>x4s</span><span class='hs-layout'>,</span> <span class='hs-varid'>x5</span><span class='hs-conop'>:-</span><span class='hs-varid'>x5s</span><span class='hs-layout'>)</span>
<a name="line-318"></a>    <span class='hs-keyword'>where</span> <span class='hs-layout'>(</span><span class='hs-varid'>x1s</span><span class='hs-layout'>,</span> <span class='hs-varid'>x2s</span><span class='hs-layout'>,</span> <span class='hs-varid'>x3s</span><span class='hs-layout'>,</span> <span class='hs-varid'>x4s</span><span class='hs-layout'>,</span><span class='hs-varid'>x5s</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>unzip5SY</span> <span class='hs-varid'>xs</span>
<a name="line-319"></a>
<a name="line-320"></a><a name="unzip6SY"></a><span class='hs-comment'>-- | The process 'unzip6SY' works as 'unzipSY', but has four output signals.</span>
<a name="line-321"></a><span class='hs-definition'>unzip6SY</span>     <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Signal</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-varid'>c</span><span class='hs-layout'>,</span><span class='hs-varid'>d</span><span class='hs-layout'>,</span><span class='hs-varid'>e</span><span class='hs-layout'>,</span><span class='hs-varid'>f</span><span class='hs-layout'>)</span> 
<a name="line-322"></a>		<span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-conid'>Signal</span> <span class='hs-varid'>a</span><span class='hs-layout'>,</span><span class='hs-conid'>Signal</span> <span class='hs-varid'>b</span><span class='hs-layout'>,</span><span class='hs-conid'>Signal</span> <span class='hs-varid'>c</span><span class='hs-layout'>,</span><span class='hs-conid'>Signal</span> <span class='hs-varid'>d</span><span class='hs-layout'>,</span><span class='hs-conid'>Signal</span> <span class='hs-varid'>e</span><span class='hs-layout'>,</span><span class='hs-conid'>Signal</span> <span class='hs-varid'>f</span><span class='hs-layout'>)</span>
<a name="line-323"></a><span class='hs-definition'>unzip6SY</span> <span class='hs-conid'>NullS</span>              <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-conid'>NullS</span><span class='hs-layout'>,</span> <span class='hs-conid'>NullS</span><span class='hs-layout'>,</span> <span class='hs-conid'>NullS</span><span class='hs-layout'>,</span> <span class='hs-conid'>NullS</span><span class='hs-layout'>,</span><span class='hs-conid'>NullS</span><span class='hs-layout'>,</span><span class='hs-conid'>NullS</span><span class='hs-layout'>)</span>
<a name="line-324"></a><span class='hs-definition'>unzip6SY</span> <span class='hs-layout'>(</span><span class='hs-layout'>(</span><span class='hs-varid'>x1</span><span class='hs-layout'>,</span><span class='hs-varid'>x2</span><span class='hs-layout'>,</span><span class='hs-varid'>x3</span><span class='hs-layout'>,</span><span class='hs-varid'>x4</span><span class='hs-layout'>,</span><span class='hs-varid'>x5</span><span class='hs-layout'>,</span><span class='hs-varid'>x6</span><span class='hs-layout'>)</span><span class='hs-conop'>:-</span><span class='hs-varid'>xs</span><span class='hs-layout'>)</span> 
<a name="line-325"></a>    <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-varid'>x1</span><span class='hs-conop'>:-</span><span class='hs-varid'>x1s</span><span class='hs-layout'>,</span> <span class='hs-varid'>x2</span><span class='hs-conop'>:-</span><span class='hs-varid'>x2s</span><span class='hs-layout'>,</span> <span class='hs-varid'>x3</span><span class='hs-conop'>:-</span><span class='hs-varid'>x3s</span><span class='hs-layout'>,</span> <span class='hs-varid'>x4</span><span class='hs-conop'>:-</span><span class='hs-varid'>x4s</span><span class='hs-layout'>,</span> <span class='hs-varid'>x5</span><span class='hs-conop'>:-</span><span class='hs-varid'>x5s</span><span class='hs-layout'>,</span> <span class='hs-varid'>x6</span><span class='hs-conop'>:-</span><span class='hs-varid'>x6s</span><span class='hs-layout'>)</span>
<a name="line-326"></a>    <span class='hs-keyword'>where</span> <span class='hs-layout'>(</span><span class='hs-varid'>x1s</span><span class='hs-layout'>,</span> <span class='hs-varid'>x2s</span><span class='hs-layout'>,</span> <span class='hs-varid'>x3s</span><span class='hs-layout'>,</span> <span class='hs-varid'>x4s</span><span class='hs-layout'>,</span> <span class='hs-varid'>x5s</span><span class='hs-layout'>,</span> <span class='hs-varid'>x6s</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>unzip6SY</span> <span class='hs-varid'>xs</span>
<a name="line-327"></a>
<a name="line-328"></a><a name="zipxSY"></a><span class='hs-comment'>-- | The process 'zipxSY' \"zips\" a signal of vectors into a vector of signals.</span>
<a name="line-329"></a><span class='hs-definition'>zipxSY</span>       <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Vector</span> <span class='hs-layout'>(</span><span class='hs-conid'>Signal</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Signal</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-330"></a><span class='hs-definition'>zipxSY</span> <span class='hs-conid'>NullV</span>            <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NullS</span>
<a name="line-331"></a><span class='hs-definition'>zipxSY</span> <span class='hs-layout'>(</span><span class='hs-conid'>NullS</span>   <span class='hs-conop'>:&gt;</span> <span class='hs-varid'>xss</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>zipxSY</span> <span class='hs-varid'>xss</span>
<a name="line-332"></a><span class='hs-definition'>zipxSY</span> <span class='hs-layout'>(</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-conop'>:&gt;</span> <span class='hs-varid'>xss</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-layout'>(</span><span class='hs-varid'>mapV</span> <span class='hs-varid'>headS</span> <span class='hs-varid'>xss</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> 
<a name="line-333"></a> 			     <span class='hs-conop'>:-</span> <span class='hs-layout'>(</span><span class='hs-varid'>zipxSY</span> <span class='hs-layout'>(</span><span class='hs-varid'>xs</span> <span class='hs-conop'>:&gt;</span> <span class='hs-layout'>(</span><span class='hs-varid'>mapV</span> <span class='hs-varid'>tailS</span> <span class='hs-varid'>xss</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-334"></a>
<a name="line-335"></a><a name="unzipxSY"></a><span class='hs-comment'>-- | The process 'unzipxSY' \"unzips\" a vector of signals into a signal of vectors.</span>
<a name="line-336"></a><span class='hs-definition'>unzipxSY</span>     <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Signal</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-layout'>(</span><span class='hs-conid'>Signal</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span>
<a name="line-337"></a><span class='hs-definition'>unzipxSY</span> <span class='hs-conid'>NullS</span>            <span class='hs-keyglyph'>=</span> <span class='hs-conid'>NullV</span>
<a name="line-338"></a><span class='hs-definition'>unzipxSY</span> <span class='hs-layout'>(</span><span class='hs-conid'>NullV</span>   <span class='hs-conop'>:-</span> <span class='hs-varid'>vss</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>unzipxSY</span> <span class='hs-varid'>vss</span>
<a name="line-339"></a><span class='hs-definition'>unzipxSY</span> <span class='hs-layout'>(</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-conop'>:-</span> <span class='hs-varid'>vss</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-layout'>(</span><span class='hs-varid'>v</span> <span class='hs-conop'>:-</span> <span class='hs-layout'>(</span><span class='hs-varid'>mapSY</span> <span class='hs-varid'>headV</span> <span class='hs-varid'>vss</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> 
<a name="line-340"></a> 			    <span class='hs-conop'>:&gt;</span> <span class='hs-layout'>(</span><span class='hs-varid'>unzipxSY</span> <span class='hs-layout'>(</span><span class='hs-varid'>vs</span> <span class='hs-conop'>:-</span> <span class='hs-layout'>(</span><span class='hs-varid'>mapSY</span> <span class='hs-varid'>tailV</span> <span class='hs-varid'>vss</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-341"></a>
<a name="line-342"></a><a name="fstSY"></a><span class='hs-comment'>-- | The process 'fstSY' selects always the first value from a signal of pairs.</span>
<a name="line-343"></a><span class='hs-definition'>fstSY</span>        <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Signal</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-conid'>Signal</span> <span class='hs-varid'>a</span>
<a name="line-344"></a><span class='hs-definition'>fstSY</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>mapSY</span> <span class='hs-varid'>fst</span>		  
<a name="line-345"></a>
<a name="line-346"></a><a name="sndSY"></a><span class='hs-comment'>-- | The process 'sndSY' selects always the second value from a signal of pairs.</span>
<a name="line-347"></a><span class='hs-definition'>sndSY</span>        <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Signal</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-conid'>Signal</span> <span class='hs-varid'>b</span>
<a name="line-348"></a><span class='hs-definition'>sndSY</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>mapSY</span> <span class='hs-varid'>snd</span>
<a name="line-349"></a>
</pre></body>
</html>