[Haskell-cafe] [web-devel] Automatic error traces

Alberto G. Corona agocorona at gmail.com
Fri Jul 19 00:00:50 CEST 2013

Hi Greeg, All

I created a repository in gitHub with the necessary code for generating
execution traces in case of error:


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"

   if True
      then  do
              liftIO $ print "world"
              liftIO $ undefined
      else liftIO $ print "not there"

run It with

 >runghc  Demos/TraceExample.hs

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 at 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 at 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 at 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:
>>> http://haskell-web.blogspot.com.es/2013/07/automatic-error-trace-generation-in.html
>>> The MFlow version that implements this is in gitHub. Not in hackage yet.
>>> https://github.com/agocorona/MFlow
>>> 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.
>>> monadLoc : http://hackage.haskell.org/package/monadloc
>>> --
>>> Alberto.
>>> _______________________________________________
>>> web-devel mailing list
>>> web-devel at haskell.org
>>> http://www.haskell.org/mailman/listinfo/web-devel
> --
> Alberto.

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20130719/ae65c7f7/attachment.htm>

More information about the Haskell-Cafe mailing list