Sophie

Sophie

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

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

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--Rendered using the Haskell Html Library v0.2-->
<HTML
><HEAD
><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8"
><TITLE
>ForSyDe.Shallow.DataflowLib</TITLE
><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css"
><SCRIPT SRC="haddock-util.js" TYPE="text/javascript"
></SCRIPT
><SCRIPT TYPE="text/javascript"
>window.onload = function () {setSynopsis("mini_ForSyDe-Shallow-DataflowLib.html")};</SCRIPT
></HEAD
><BODY
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="topbar"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD
><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" "
></TD
><TD CLASS="title"
>ForSyDe-3.1.1: ForSyDe's Haskell-embedded Domain Specific Language.</TD
><TD CLASS="topbut"
><A HREF="src/ForSyDe-Shallow-DataflowLib.html"
>Source code</A
></TD
><TD CLASS="topbut"
><A HREF="index.html"
>Contents</A
></TD
><TD CLASS="topbut"
><A HREF="doc-index.html"
>Index</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="modulebar"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD
><FONT SIZE="6"
>ForSyDe.Shallow.DataflowLib</FONT
></TD
><TD ALIGN="right"
><TABLE CLASS="narrow" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="infohead"
>Portability</TD
><TD CLASS="infoval"
>portable</TD
></TR
><TR
><TD CLASS="infohead"
>Stability</TD
><TD CLASS="infoval"
>experimental</TD
></TR
><TR
><TD CLASS="infohead"
>Maintainer</TD
><TD CLASS="infoval"
>forsyde-dev@ict.kth.se</TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="section4"
><B
>Contents</B
></TD
></TR
><TR
><TD
><DL
><DT
><A HREF="#1"
>Data Types           
</A
></DT
><DT
><A HREF="#2"
>Combinational Process Constructors 
</A
></DT
><DT
><A HREF="#3"
>Sequential Process Constructors 
</A
></DT
></DL
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
>Description</TD
></TR
><TR
><TD CLASS="doc"
><P
>The dataflow library defines data types, process constructors and
 functions to model dataflow process networks, as described by Lee and
 Parks in Dataflow process networks, IEEE Proceedings, 1995 ([LeeParks95]).
</P
><P
>Each process is defined by a set of firing rules and corresponding
 actions. A process fires, if the incoming signals match a firing
 rule. Then the process consumes the matched tokens and executes the
 action corresponding to the firing rule.
</P
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
>Synopsis</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="decl"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>data</SPAN
>  <A HREF="#t%3AFiringToken"
>FiringToken</A
> a </TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="decl"
>= <A HREF="#v%3AWild"
>Wild</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AValue"
>Value</A
> a</TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AmapDF"
>mapDF</A
> :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> a =&gt; [[<A HREF="ForSyDe-Shallow-DataflowLib.html#t%3AFiringToken"
>FiringToken</A
> a]] -&gt; (<A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> a -&gt; [[b]]) -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> a -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> b</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AzipWithDF"
>zipWithDF</A
> :: (<A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> a, <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> b) =&gt; [([<A HREF="ForSyDe-Shallow-DataflowLib.html#t%3AFiringToken"
>FiringToken</A
> b], [<A HREF="ForSyDe-Shallow-DataflowLib.html#t%3AFiringToken"
>FiringToken</A
> a])] -&gt; (<A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> b -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> a -&gt; [[c]]) -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> b -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> a -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> c</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AzipWith3DF"
>zipWith3DF</A
> :: (<A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> a, <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> b, <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> c) =&gt; [([<A HREF="ForSyDe-Shallow-DataflowLib.html#t%3AFiringToken"
>FiringToken</A
> a], [<A HREF="ForSyDe-Shallow-DataflowLib.html#t%3AFiringToken"
>FiringToken</A
> b], [<A HREF="ForSyDe-Shallow-DataflowLib.html#t%3AFiringToken"
>FiringToken</A
> c])] -&gt; (<A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> a -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> b -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> c -&gt; [[d]]) -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> a -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> b -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> c -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> d</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AscanlDF"
>scanlDF</A
> :: (<A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> a, <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> b) =&gt; [(<A HREF="ForSyDe-Shallow-DataflowLib.html#t%3AFiringToken"
>FiringToken</A
> b, [<A HREF="ForSyDe-Shallow-DataflowLib.html#t%3AFiringToken"
>FiringToken</A
> a])] -&gt; (b -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> a -&gt; [b]) -&gt; b -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> a -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> b</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AmooreDF"
>mooreDF</A
> :: (<A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> a, <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> b) =&gt; [(<A HREF="ForSyDe-Shallow-DataflowLib.html#t%3AFiringToken"
>FiringToken</A
> b, [<A HREF="ForSyDe-Shallow-DataflowLib.html#t%3AFiringToken"
>FiringToken</A
> a])] -&gt; (b -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> a -&gt; [b]) -&gt; (b -&gt; [c]) -&gt; b -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> a -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> c</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AmealyDF"
>mealyDF</A
> :: (<A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> a, <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> b) =&gt; [(<A HREF="ForSyDe-Shallow-DataflowLib.html#t%3AFiringToken"
>FiringToken</A
> b, [<A HREF="ForSyDe-Shallow-DataflowLib.html#t%3AFiringToken"
>FiringToken</A
> a])] -&gt; (b -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> a -&gt; [b]) -&gt; (b -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> a -&gt; [[c]]) -&gt; b -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> a -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> c</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
><A NAME="1"
><A NAME="1"
>Data Types           
</A
></A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="doc"
><P
>The data type <TT
>FiringToken</TT
> defines the data type for tokens. The
   constructor <TT
>Wild</TT
> constructs a token wildcard, the constructor
   <TT
>Value a</TT
> constructs a token with value <TT
>a</TT
>.
</P
><P
>A sequence (pattern) matches a signal, if the sequence is a prefix of
 the signal. The following list illustrates the firing rules:
</P
><UL
><LI
> [&#x22a5;] matches always  (<EM
>NullS</EM
> in ForSyDe)
</LI
><LI
> [*] matches signal with at least one token (<EM
>[Wild]</EM
> in ForSyDe)
</LI
><LI
> [v] matches signal with v as its first value (<EM
>[Value v]</EM
> in ForSyDe)
</LI
><LI
> [*,*] matches signals with at least two tokens (<EM
>[Wild,Wild]</EM
> in ForSyDe) 
</LI
></UL
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><SPAN CLASS="keyword"
>data</SPAN
>  <A NAME="t:FiringToken"
><A NAME="t%3AFiringToken"
></A
></A
><B
>FiringToken</B
> a </TD
><TD CLASS="declbut"
><A HREF="src/ForSyDe-Shallow-DataflowLib.html#FiringToken"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="section4"
>Constructors</TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
><TR
><TD CLASS="arg"
><A NAME="v:Wild"
><A NAME="v%3AWild"
></A
></A
><B
>Wild</B
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v:Value"
><A NAME="v%3AValue"
></A
></A
><B
>Value</B
> a</TD
><TD CLASS="rdoc"
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="section4"
><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'i:FiringToken')" ALT="show/hide"
> Instances</TD
></TR
><TR
><TD CLASS="body"
><DIV ID="i:FiringToken" STYLE="display:block;"
><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
><TR
><TD CLASS="decl"
><A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> a =&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> (<A HREF="ForSyDe-Shallow-DataflowLib.html#t%3AFiringToken"
>FiringToken</A
> a)</TD
></TR
><TR
><TD CLASS="decl"
><A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Text-Show.html#t%3AShow"
>Show</A
> a =&gt; <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Text-Show.html#t%3AShow"
>Show</A
> (<A HREF="ForSyDe-Shallow-DataflowLib.html#t%3AFiringToken"
>FiringToken</A
> a)</TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
><A NAME="2"
><A NAME="2"
>Combinational Process Constructors 
</A
></A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="doc"
><P
>Combinatorial processes
 do not have an internal state. This means, that the output
 signal only depends on the input signals.
</P
><P
>To illustrate the concept of data flow processes, we create a process that selects tokens from two inputs according to a control signal. 
</P
><P
>The process has the following firing rules [LeeParks95]:
</P
><UL
><LI
> R1 = {[*], &#x22a5;, [T]}
</LI
><LI
> R2 = {&#x22a5;, [*], [F]}
</LI
></UL
><P
>The corresponding ForSyDe formulation of the firing rules is:
</P
><PRE
>
  selectRules = [ ([Wild], [], [Value True]),
                  ([], [Wild], [Value False]) ]
</PRE
><P
>For the output we formulate the following set of output functions:
</P
><PRE
>
  selectOutput xs ys _	= [ [headS xs], [headS ys] ]
</PRE
><P
>The select process <EM
>selectDF</EM
> is then defined by:
</P
><PRE
>
  selectDF :: Eq a =&gt; Signal a -&gt; Signal a 
                   -&gt; Signal Bool -&gt; Signal a
  selectDF =  zipWith3DF selectRules selectOutput
</PRE
><P
>Given the signals <EM
>s1</EM
>, <EM
>s2</EM
> and <EM
>s3</EM
>
</P
><PRE
>
  s1 = signal [1,2,3,4,5,6]
  s2 = signal [7,8,9,10,11,12]
  s3 = signal [True, True, False, False, True, True]
</PRE
><P
>the executed process gives the following results:
</P
><PRE
> 
  DataflowLib&gt; selectDF s1 s2 s3
  {1,2,7,8,3,4} :: Signal Integer
</PRE
><P
>The library contains the following combinational process constructors:
</P
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:mapDF"
><A NAME="v%3AmapDF"
></A
></A
><B
>mapDF</B
> :: <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> a =&gt; [[<A HREF="ForSyDe-Shallow-DataflowLib.html#t%3AFiringToken"
>FiringToken</A
> a]] -&gt; (<A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> a -&gt; [[b]]) -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> a -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> b</TD
><TD CLASS="declbut"
><A HREF="src/ForSyDe-Shallow-DataflowLib.html#mapDF"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>The process constructor <TT
>mapDF</TT
> takes a list of firing rules, a list of corresponding output functions and generates a data flow process with one input and one output signal.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:zipWithDF"
><A NAME="v%3AzipWithDF"
></A
></A
><B
>zipWithDF</B
> :: (<A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> a, <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> b) =&gt; [([<A HREF="ForSyDe-Shallow-DataflowLib.html#t%3AFiringToken"
>FiringToken</A
> b], [<A HREF="ForSyDe-Shallow-DataflowLib.html#t%3AFiringToken"
>FiringToken</A
> a])] -&gt; (<A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> b -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> a -&gt; [[c]]) -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> b -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> a -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> c</TD
><TD CLASS="declbut"
><A HREF="src/ForSyDe-Shallow-DataflowLib.html#zipWithDF"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>The process constructors <TT
>zipWithDF</TT
> takes a list of firing rules, a list of corresponding output functions to generate a data flow process with two input signals and one output signal.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:zipWith3DF"
><A NAME="v%3AzipWith3DF"
></A
></A
><B
>zipWith3DF</B
> :: (<A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> a, <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> b, <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> c) =&gt; [([<A HREF="ForSyDe-Shallow-DataflowLib.html#t%3AFiringToken"
>FiringToken</A
> a], [<A HREF="ForSyDe-Shallow-DataflowLib.html#t%3AFiringToken"
>FiringToken</A
> b], [<A HREF="ForSyDe-Shallow-DataflowLib.html#t%3AFiringToken"
>FiringToken</A
> c])] -&gt; (<A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> a -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> b -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> c -&gt; [[d]]) -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> a -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> b -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> c -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> d</TD
><TD CLASS="declbut"
><A HREF="src/ForSyDe-Shallow-DataflowLib.html#zipWith3DF"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>The process constructors <TT
>zipWith3DF</TT
> takes a list of firing rules, a list of corresponding output functions to generate a data flow process with three input signals and one output signal.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
><A NAME="3"
><A NAME="3"
>Sequential Process Constructors 
</A
></A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="doc"
><P
>Sequential processes have
 an internal state. This means, that the output signal may
 depend internal state and on the input signal. 
</P
><P
>As an example we can view a process calculating the running sum
 of the input tokens. It has only one firing rule, which is
 illustrated below.
</P
><PRE
>
  Firing Rule    Next State    Output
  ------------------------------------
  (*,[*])        state + x     {state}
</PRE
><P
>A dataflow process using these firing rules and the initial state 0 can be formulated in ForSyDe as 
</P
><PRE
>
  rs xs = mealyDF firingRule nextState output initState xs
     where 
        firingRule	  = [(Wild, [Wild])]
        nextState state xs = [(state + headS xs)]
        output state _	  = [[state]]
        initState	  = 0
</PRE
><P
>Execution of the process gives
</P
><PRE
>     
  DataflowLib&gt; rs (signal[1,2,3,4,5,6])
    {0,1,3,6,10,15} :: Signal Integer
</PRE
><P
>Another 'running sum' process <EM
>rs2</EM
> takes two tokens, pushes
 them into a queue of five elements and calculates the sum as
 output.
</P
><PRE
>
  rs2 = mealyDF fs ns o init
     where 
        init	    = [0,0,0,0,0]
        fs	    = [(Wild, ([Wild, Wild]))]
        ns state xs = [drop 2 state ++ fromSignal (takeS 2 xs)]
        o state _   = [[(sum state)]]
</PRE
><P
>Execution of the process gives
</P
><PRE
>
  DataflowLib&gt;rs2 (signal [1,2,3,4,5,6,7,8,9,10])
  {0,3,10,20,30} :: Signal Integer
</PRE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:scanlDF"
><A NAME="v%3AscanlDF"
></A
></A
><B
>scanlDF</B
> :: (<A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> a, <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> b) =&gt; [(<A HREF="ForSyDe-Shallow-DataflowLib.html#t%3AFiringToken"
>FiringToken</A
> b, [<A HREF="ForSyDe-Shallow-DataflowLib.html#t%3AFiringToken"
>FiringToken</A
> a])] -&gt; (b -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> a -&gt; [b]) -&gt; b -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> a -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> b</TD
><TD CLASS="declbut"
><A HREF="src/ForSyDe-Shallow-DataflowLib.html#scanlDF"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>The process constructor <TT
>scanlDF</TT
> implements a finite state machine without output decoder in the ForSyDe methodology. It takes a set of firing rules and a set of corresponding next state functions as arguments. A firing rule is a tuple. The first value is a pattern for the state, the second value corresponds to an input pattern. When a pattern matches, the process fires, the corresponding next state is executed, and the tokens matching the pattern are consumed.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:mooreDF"
><A NAME="v%3AmooreDF"
></A
></A
><B
>mooreDF</B
> :: (<A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> a, <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> b) =&gt; [(<A HREF="ForSyDe-Shallow-DataflowLib.html#t%3AFiringToken"
>FiringToken</A
> b, [<A HREF="ForSyDe-Shallow-DataflowLib.html#t%3AFiringToken"
>FiringToken</A
> a])] -&gt; (b -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> a -&gt; [b]) -&gt; (b -&gt; [c]) -&gt; b -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> a -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> c</TD
><TD CLASS="declbut"
><A HREF="src/ForSyDe-Shallow-DataflowLib.html#mooreDF"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>The process constructor <TT
>mooreDF</TT
> implements a Moore finite state machine in the ForSyDe methodology. It takes a set of firing rules, a set of corresponding next state functions and a set of output functions as argument. A firing rule is a tuple. The first value is a pattern for the state, the second value corresponds to an input pattern. When a pattern matches, the process fires, the corresponding next state and output functions are executed, and the tokens matching the pattern are consumed.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="topdecl"
><TABLE CLASS="declbar"
><TR
><TD CLASS="declname"
><A NAME="v:mealyDF"
><A NAME="v%3AmealyDF"
></A
></A
><B
>mealyDF</B
> :: (<A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> a, <A HREF="/usr/share/doc/ghc/html/libraries/base-4.2.0.2/Data-Eq.html#t%3AEq"
>Eq</A
> b) =&gt; [(<A HREF="ForSyDe-Shallow-DataflowLib.html#t%3AFiringToken"
>FiringToken</A
> b, [<A HREF="ForSyDe-Shallow-DataflowLib.html#t%3AFiringToken"
>FiringToken</A
> a])] -&gt; (b -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> a -&gt; [b]) -&gt; (b -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> a -&gt; [[c]]) -&gt; b -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> a -&gt; <A HREF="ForSyDe-Shallow-Signal.html#t%3ASignal"
>Signal</A
> c</TD
><TD CLASS="declbut"
><A HREF="src/ForSyDe-Shallow-DataflowLib.html#mealyDF"
>Source</A
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="doc"
>The process constructor <TT
>mealyDF</TT
> implements the most general state machine in the ForSyDe methodology. It takes a set of firing rules, a set of corresponding next state functions and a set of output functions as argument. A firing rule is a tuple. The first value is a pattern for the state, the second value corresponds to an input pattern. When a pattern matches, the process fires, the corresponding next state and output functions are executed, and the tokens matching the pattern are consumed.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="botbar"
>Produced by <A HREF="http://www.haskell.org/haddock/"
>Haddock</A
> version 2.6.1</TD
></TR
></TABLE
></BODY
></HTML
>