-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Simple trace-based debugger -- -- An easy to use debugger for viewing function calls and intermediate -- variables. To use, annotate the function under test, run the code, and -- view the generated web page. Full usage instructions are at -- Debug. @package debug @version 0.0.1 -- | Module for recording and manipulating debug traces. For most users, -- the TemplateHaskell helpers in Debug should be -- sufficient. module Debug.Record -- | Metadata about a function, used to drive the HTML view. data Function Function :: String -> String -> [String] -> String -> Function -- | Function name [funName] :: Function -> String -- | Function source, using n to break lines [funSource] :: Function -> String -- | Variables for the arguments to the function [funArguments] :: Function -> [String] -- | Variable for the result of the function [funResult] :: Function -> String -- | A single function call, used to attach additional information data Call -- | A version of fun allowing you to pass further information about -- the Function which is used when showing debug views. funInfo :: Show a => Function -> (Call -> a) -> a -- | Called under a lambda with a function name to provide a unique context -- for a particular call, e.g.: -- --
-- tracedAdd x y = fun "add" $ \t -> var t "x" x + var t "y" y ---- -- This function involves giving identity to function calls, so is -- unsafe, and will only work under a lambda. fun :: Show a => String -> (Call -> a) -> a -- | Used in conjunction with fun to annotate variables. See -- fun for an example. var :: Show a => Call -> String -> a -> a -- | Clear all debug information. Useful when working in ghci to -- reset any previous debugging work and reduce the amount of output. debugClear :: IO () -- | Print information about the observed function calls to stdout. -- Definitely not machine readable, usually not human readable either. debugPrint :: IO () -- | Obtain information about observed functions in JSON format. The JSON -- format is not considered a stable part of the interface, more -- presented as a back door to allow exploration of alternative views. debugJSON :: IO String -- | Open a web browser showing information about observed functions. debugView :: IO () -- | Save information about observed functions to the specified file, in -- HTML format. debugSave :: FilePath -> IO () instance GHC.Show.Show Debug.Record.Function instance GHC.Classes.Ord Debug.Record.Function instance GHC.Classes.Eq Debug.Record.Function instance GHC.Show.Show a -- | Module for debugging Haskell programs. To use, take the functions that -- you are interested in debugging, e.g.: -- --
-- module QuickSort(quicksort) where -- import Data.List -- -- quicksort :: Ord a => [a] -> [a] -- quicksort [] = [] -- quicksort (x:xs) = quicksort lt ++ [x] ++ quicksort gt -- where (lt, gt) = partition (<= x) xs ---- -- Turn on the TemplateHaskell and ViewPatterns -- extensions, import Debug, indent your code and place it under a -- call to debug, e.g.: -- --
-- {-# LANGUAGE TemplateHaskell, ViewPatterns #-}
-- module QuickSort(quicksort) where
-- import Data.List
-- import Debug
--
-- debug [d|
-- quicksort :: Ord a => [a] -> [a]
-- quicksort [] = []
-- quicksort (x:xs) = quicksort lt ++ [x] ++ quicksort gt
-- where (lt, gt) = partition (<= x) xs
-- |]
--
--
-- We can now run our debugger with:
--
-- -- $ ghci QuickSort.hs -- GHCi, version 8.2.1: http://www.haskell.org/ghc/ :? for help -- [1 of 1] Compiling QuickSort ( QuickSort.hs, interpreted ) -- Ok, 1 module loaded. -- *QuickSort> quicksort "haskell" -- "aehklls" -- *QuickSort> debugView ---- -- The final call to debugView starts a web browser to view the -- recorded information. Alternatively call debugSave to write the -- web page to a known location. -- -- For more ways to view the result (e.g. producing JSON) or record -- traces (without using TemplateHaskell) see -- Debug.Record. module Debug -- | A TemplateHaskell wrapper to convert a normal function into a -- traced function. For an example see Debug. Inserts -- funInfo and var calls. debug :: Q [Dec] -> Q [Dec] -- | Open a web browser showing information about observed functions. debugView :: IO () -- | Save information about observed functions to the specified file, in -- HTML format. debugSave :: FilePath -> IO () -- | Clear all debug information. Useful when working in ghci to -- reset any previous debugging work and reduce the amount of output. debugClear :: IO ()