Hi,Marcelo,<div>No. .Acid state is  explcitly managed by the process by means of state management primitives</div><div><br></div><div>In Control.Workflow the state is managed in a implicit way. <br><br>It is a monad transformer mainly  is designed for wrapping IO computations.</div>

<div><br>the lifting primitive, step, store the intermediate result and recover the application state.</div><div><br></div><div>in acid state the process choose what to write in the state</div><div><br></div><div>in workflow the state written is the complete state of the process.</div>

<div><br></div><div>See the example in the documentation. the process , </div><div><br></div><div><a href="http://hackage.haskell.org/packages/archive/Workflow/0.7.0.7/doc/html/Control-Workflow.html">http://hackage.haskell.org/packages/archive/Workflow/0.7.0.7/doc/html/Control-Workflow.html</a></div>

<pre style="margin-top:0.8em;margin-bottom:0.8em;padding:0.25em;line-height:15.454545021057129px;background-color:rgb(229,237,244);overflow:auto;border-bottom-width:0.25em;border-bottom-style:solid;border-bottom-color:white;font-size:12.727272033691406px">

import Control.Workflow
import Control.Concurrent(threadDelay)
import System.IO (hFlush,stdout)

mcount n= do <code style="margin:0px;padding:0px"><a href="http://hackage.haskell.org/packages/archive/Workflow/0.7.0.7/doc/html/Control-Workflow.html#v:step" style="margin:0px;padding:0px;text-decoration:none;color:rgb(171,105,84)">step</a></code> $  do
                       putStr (show n ++ &quot; &quot;)
                       hFlush stdout
                       threadDelay 1000000
             mcount (n+1)
             return () -- to disambiguate the return type

main= <code style="margin:0px;padding:0px"><a href="http://hackage.haskell.org/packages/archive/Workflow/0.7.0.7/doc/html/Control-Workflow.html#v:exec1" style="margin:0px;padding:0px;text-decoration:none;color:rgb(171,105,84)">exec1</a></code>  &quot;count&quot;  $ mcount (0 :: Int)</pre>

<pre class="screen" style="margin-top:0.8em;margin-bottom:0.8em;padding:0.25em;line-height:15.454545021057129px;background-color:rgb(229,237,244);overflow:auto;border-bottom-width:0.25em;border-bottom-style:solid;border-bottom-color:white;font-size:12.727272033691406px">

<code class="prompt" style="margin:0px;padding:0px">&gt;&gt;&gt; </code><strong class="userinput" style="margin:0px;padding:0px">runghc demos\sequence.hs
</strong>&gt;0 1 2 3
&gt;CTRL-C Pressed
<code class="prompt" style="margin:0px;padding:0px">&gt;&gt;&gt; </code><strong class="userinput" style="margin:0px;padding:0px">runghc demos\sequence.hs
</strong>&gt;3 4 5 6 7
&gt;CTRL-C Pressed
<code class="prompt" style="margin:0px;padding:0px">&gt;&gt;&gt; </code><strong class="userinput" style="margin:0px;padding:0px">runghc demos\sequence.hs
</strong>&gt;7 8 9 10 11
...</pre><div><div>in subsequent executions the process start to execute IO computations from the last point logged:</div></div><div><br></div><div>As the documentation says <span style="font-family:sans-serif;font-size:12.727272033691406px;line-height:16.363636016845703px;background-color:rgb(255,255,255)"> some side effect can be re-executed after recovery if the log is not complete. This may happen after an unexpected shutdown (in this case Contro-C has been pressed) or due to an asynchronous log writing policy. (see </span><code style="margin:0px;padding:0px;line-height:15.454545021057129px;font-size:12.727272033691406px;background-color:rgb(255,255,255)"><a href="http://hackage.haskell.org/packages/archive/Workflow/0.7.0.7/doc/html/Control-Workflow.html#v:syncWrite" style="margin:0px;padding:0px;color:rgb(171,105,84)">syncWrite</a></code><span style="font-family:sans-serif;font-size:12.727272033691406px;line-height:16.363636016845703px;background-color:rgb(255,255,255)">) </span><span style="background-color:rgb(255,255,255);font-family:sans-serif;font-size:12.727272033691406px;line-height:16.363636016845703px">(writing is cached).</span></div>

<div><span style="background-color:rgb(255,255,255);font-family:sans-serif;font-size:12.727272033691406px;line-height:16.363636016845703px"><br></span></div><div><span style="background-color:rgb(255,255,255);font-family:sans-serif;font-size:12.727272033691406px;line-height:16.363636016845703px">Althoug this is not event sourcing, The logging and recovery facilities can be used for even sourcing. </span></div>

<div><span style="font-family:sans-serif;font-size:12.727272033691406px;line-height:16.363636016845703px;background-color:rgb(255,255,255)"><br></span></div><div><span style="font-family:sans-serif;font-size:12.727272033691406px;line-height:16.363636016845703px;background-color:rgb(255,255,255)">Alberto</span></div>

<div><span style="font-family:sans-serif;font-size:12.727272033691406px;line-height:16.363636016845703px;background-color:rgb(255,255,255)"><br></span></div><div><div class="gmail_quote">2012/9/30 Marcelo Sousa <span dir="ltr">&lt;<a href="mailto:dipython@gmail.com" target="_blank">dipython@gmail.com</a>&gt;</span><br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi,<br>
<div class="im"><br>
On Sun, Sep 30, 2012 at 4:22 AM, Alberto G. Corona &lt;<a href="mailto:agocorona@gmail.com">agocorona@gmail.com</a>&gt; wrote:<br>
&gt; It´´s a very iteresting concept.<br>
&gt;<br>
&gt; The Workflow Monad transformer [1], in Control.Workflow perform<br>
&gt; logging and recovery of application istate from the log created.<br>
&gt; It has no implementation of roll-back or limited recovery upto a<br>
&gt; point, but this is easy to implement.<br>
<br>
</div>Is Control.Workflow similar with acid-state with respect to the way<br>
you recovery the current state?<br>
<div class="im"><br>
&gt; It also has many inspection and synchronization primitives. It has<br>
&gt; been used also for translating the log of a program and recovering the<br>
&gt; state in another machine. The log  can be pretty-printed for<br>
&gt; debugging.<br>
<br>
</div>Can you &quot;somehow&quot; recover impure (IO) computations?<br>
<br>
&gt; [1] <a href="http://hackage.haskell.org/package/Workflow" target="_blank">http://hackage.haskell.org/package/Workflow</a><br>
<br>
Regards,<br>
Marcelo<br>
<div class="HOEnZb"><div class="h5"><br>
&gt; 2012/9/30 KC &lt;<a href="mailto:kc1956@gmail.com">kc1956@gmail.com</a>&gt;:<br>
&gt;&gt; <a href="http://martinfowler.com/eaaDev/EventSourcing.html" target="_blank">http://martinfowler.com/eaaDev/EventSourcing.html</a><br>
&gt;&gt;<br>
&gt;&gt; <a href="http://martinfowler.com/articles/lmax.html" target="_blank">http://martinfowler.com/articles/lmax.html</a><br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; --<br>
&gt;&gt; --<br>
&gt;&gt; Regards,<br>
&gt;&gt; KC<br>
&gt;&gt;<br>
&gt;&gt; _______________________________________________<br>
&gt;&gt; Haskell-Cafe mailing list<br>
&gt;&gt; <a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
&gt;&gt; <a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; --<br>
&gt; Alberto.<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; Haskell-Cafe mailing list<br>
&gt; <a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
&gt; <a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br>Alberto.<br>
</div>