Safe Haskell | None |
---|---|

Language | Haskell98 |

## Synopsis

- module Debug.Trace
- traceId :: String -> String
- traceShowId :: Show a => a -> a
- traceM :: Applicative f => String -> f ()
- traceShowM :: (Show a, Applicative f) => a -> f ()

# Documentation

module Debug.Trace

Like `trace`

but returns the message instead of a third value.

`>>>`

"hello hello"`traceId "hello"`

*Since: base-4.7.0.0*

traceShowId :: Show a => a -> a #

Like `traceShow`

but returns the shown value instead of a third value.

`>>>`

(6,"helloworld") (6,"helloworld")`traceShowId (1+2+3, "hello" ++ "world")`

*Since: base-4.7.0.0*

traceM :: Applicative f => String -> f () #

Like `trace`

but returning unit in an arbitrary `Applicative`

context. Allows
for convenient use in do-notation.

Note that the application of `traceM`

is not an action in the `Applicative`

context, as `traceIO`

is in the `IO`

type. While the fresh bindings in the
following example will force the `traceM`

expressions to be reduced every time
the `do`

-block is executed, `traceM "not crashed"`

would only be reduced once,
and the message would only be printed once. If your monad is in `MonadIO`

,
`liftIO . traceIO`

may be a better option.

`>>>`

do x <- Just 3 traceM ("x: " ++ show x) y <- pure 12 traceM ("y: " ++ show y) pure (x*2 + y) :} x: 3 y: 12 Just 18`:{`

*Since: base-4.7.0.0*

traceShowM :: (Show a, Applicative f) => a -> f () #