@hackage trace-function-call0.1
Easy lightweight tracing of function arguments and results for ad hoc debugging
Categories
License
BSD-3-Clause
Maintainer
beakerchu@googlemail.com
Links
- Documentation
- No source repository
- Security
Versions
- 0.1 Tue, 20 Dec 2011
Installation
Dependencies (1)
Dependents (1)
@hackage/acme-everything
Example:
You have a pure function that may be giving you incorrect results.
fib :: Int -> Int
fib n | n < 2 = n
| otherwise = fib (n-1) - fib (n-2)>>>
Insert a call to traceFunction to aid with debugging.
fib, fib' :: Int -> Int
fib = traceFunction "fib" fib'
fib' n | n < 2 = n
| otherwise = fib (n-1) - fib (n-2)Calls to your pure function now provide its parameters and result as debugging information.
>>>
Hopefully this will help you home in on your bug.
Note that traceFunction works with functions of more than one parameter...
traceElem :: Eq a => a -> [a] -> Bool traceElem = traceFunction "elem" elem
...and with "functions" of no parameters at all.
alpha = traceFunction "Fine-structure constant" $ e * e * c * mu0 / 2 / h
Parameters and results must implement the Show typeclass. As a special case, parameters may instead be
functions, and are shown as an underscore (_).
>>>>>>>>>
KNOWN BUG: The resultant function is strict, even when the input function is non-strict in some of its parameters. In particular,
if one of the parameters is
error "foo", the return value when the resultant function call is evaluated will beerror "foo"; no trace message will be outputif one of the parameters doesn't terminate when evaluated, the resultant function call will not terminate when evaluated either; no trace message will be output