Hi Greeg, All
 
I created a repository in gitHub with the necessary code for generating execution traces in case of error:
 
https://github.com/agocorona/control-monad-supervisor/blob/master/Demos/TraceExample.hs
 
the code is
 
{-# OPTIONS -F -pgmF MonadLoc #-}
module Demos.TraceExample (
) where
import Control.Monad.Loc
import Control.Monad.Supervisor.Trace
import Control.Monad.Trans
main= runTrace $ do
   liftIO $ print "hello"
  
   example
example=
   if True
      then  do
              liftIO $ print "world"
              liftIO $ undefined
      else liftIO $ print "not there"
 
run It with
 
 >runghc  Demos/TraceExample.hs 
 
"hello"
"world"
TraceExample.hs: TRACE (error in the last line):
main, Demos.TraceExample(Demos\TraceExample.hs): (23, 18)
main, Demos.TraceExample(Demos\TraceExample.hs): (26, 4)
example, Demos.TraceExample(Demos\TraceExample.hs): (30, 13)
example, Demos.TraceExample(Demos\TraceExample.hs): (32, 15)
exception: Prelude.undefined
 
to show the generated trace. It is necessary to install the monadloc-pp and the monadloc packages.
 
It uses Control.Monad.Supervisor which is the monad that execute the backtracking that generate the error trace after the error. ( I will upload it to Hackage soon).
 
It uses also Control.Monad.Supervisor.Trace,  that has a MonadLoc instance for the Supervisor monad. You can create a MonadLogger instance taking as example the MonadLoc one.


2013/7/17 Alberto G. Corona <agocorona@gmail.com>
Hi Greeg.
 
Nice I will publish the mechanism in a separate package once I clean it up
 
At first sight, It is possible to use file-location and monad-logger with the traces  instead of monadloc. In the meantime, I will advance to you a copy of the details in a separate mail.


2013/7/16 Greg Weber <greg@gregweber.info>
That's great. We should collaborate on this. I wrote the file-location package and Michael Snoyman wrote monad-logger: both of these give file location information. I also added command tracing to Shelly (which could also benefit from this kind of thing) and recently released rollbar for error notification and would like to have as much line info as possible for that.


On Tue, Jul 16, 2013 at 5:45 AM, Alberto G. Corona <agocorona@gmail.com> wrote:
It is important to have execution traces in case of error. specially in server applications that run 24/7 such are web applications

Thanks to the wonderful package monadloc by Pepe Iborra, now MFlow can generate a complete execution trace in case of error.
 
The control-monad-exception uses monadLoc to generate stack traces, but MFlow makes use of his backtracking mechanism to generate a complete execution trace.
 
Here I explain what and how:
 
 
The MFlow version that implements this is in gitHub. Not in hackage yet.
 
 
I´m quite proud of it since it is one of the things closest to magic that I have done.  
 
Feedback?
 
I do not want to keep MFlow as a single person development. I think that it has many unique and nice features not available in other languages and frameworks, and it can be raised to a serious exploitation level by the Haskell community. This will attract people working in Industrial Web development to Haskell thanks to the edge in expressiveness and safety necessary for creating industrial solutions that Haskell has over other languages.
 
It uses most other Haskell web developments  blaze, wai, hamlet etc and there are many other things to come.
 

--
Alberto.

_______________________________________________
web-devel mailing list
web-devel@haskell.org
http://www.haskell.org/mailman/listinfo/web-devel





--
Alberto.



--
Alberto.