htrace (empty) → 0.1
raw patch · 4 files changed
+148/−0 lines, 4 filesdep +basesetup-changed
Dependencies added: base
Files
- Debug/HTrace.hs +94/−0
- LICENSE +23/−0
- Setup.hs +2/−0
- htrace.cabal +29/−0
+ Debug/HTrace.hs view
@@ -0,0 +1,94 @@+{-# LANGUAGE BangPatterns #-}+-- | Like Debug.Trace.trace, but with indentation corresponding to the+-- level of nesting in the evaluation tree of expressions under htrace.+-- WARNING: Currently only works in single-threaded programs.+-- +-- Example:+-- +-- +-- > xs = map (\x -> htrace (show x) x) [1..10]+-- >+-- > s = foldl (\a b -> htrace "+" (a+b)) 0 xs+-- > s2 = foldl' (\a b -> htrace "+" (a+b)) 0 xs+-- >+-- > b = htrace "b" 2+-- > c = htrace "c" 3+-- > a = htrace "a" $ b + c+-- > x = htrace "x" $ b + c+-- +--+-- >>> a+-- a+-- b+-- c+-- 5+-- +-- >>> x+-- x+-- 5+-- +-- >>> s+-- ++-- ++-- ++-- ++-- ++-- ++-- ++-- ++-- ++-- ++-- 1+-- 2+-- 3+-- 4+-- 5+-- 6+-- 7+-- 8+-- 9+-- 10+-- 55+-- +-- (reload)+-- +-- >>> s2+-- ++-- 1+-- ++-- 2+-- ++-- 3+-- ++-- 4+-- ++-- 5+-- ++-- 6+-- ++-- 7+-- ++-- 8+-- ++-- 9+-- ++-- 10+-- 55+-- +module Debug.HTrace (htrace) where++import Data.List (foldl')+import Data.IORef+import System.IO.Unsafe++level = unsafePerformIO $ newIORef 0++-- | Trace "str" on a separate line, and increase indentation of subsequent+-- traces while x is being evaluated. +htrace str x = unsafePerformIO $ do+ lvl <- readIORef level+ putStrLn (replicate (2*lvl) ' ' ++ str)+ writeIORef level (lvl+1)+ let !vx = x+ writeIORef level lvl+ return vx
+ LICENSE view
@@ -0,0 +1,23 @@+Copyright (c) 2012, Eugene Kirpichov+All rights reserved.++Redistribution and use in source and binary forms, with or without+modification, are permitted provided that the following conditions are met:++1. Redistributions of source code must retain the above copyright notice,+ this list of conditions and the following disclaimer.+2. Redistributions in binary form must reproduce the above copyright+ notice, this list of conditions and the following disclaimer in the+ documentation and/or other materials provided with the distribution.++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE+POSSIBILITY OF SUCH DAMAGE.
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ htrace.cabal view
@@ -0,0 +1,29 @@+Name: htrace+Category: Debug+Version: 0.1+Cabal-version: >= 1.2+Build-type: Simple+Copyright: Eugene Kirpichov+Maintainer: ekirpichov@gmail.com +Author: Eugene Kirpichov+License: BSD3+License-File: LICENSE+Synopsis: Hierarchical tracing for debugging of lazy evaluation+Description:+ Hierarchical tracing (like Debug.Trace.trace but with indentation)+ for debugging of lazy evaluation+Cabal-Version: >= 1.6++Flag split-base++Source-repository head+ type: git+ location: git://github.com/jkff/htrace.git++Library+ if flag(split-base)+ Build-depends: base >= 3.0 && < 5.0+ else+ Build-depends: base < 3.0+ Exposed-modules: Debug.HTrace+