network-transport-tests-0.2.4.2: Unit tests for Network.Transport implementations

Safe HaskellSafe
LanguageHaskell98

Network.Transport.Tests.Traced

Description

Add tracing to the IO monad (see examples).

Usage
{-# LANGUAGE RebindableSyntax #-}
import Prelude hiding (catch, (>>=), (>>), return, fail)
import Traced
Example
test1 :: IO Int
test1 = do
  Left x  <- return (Left 1 :: Either Int Int)
  putStrLn "Hello world"
  Right y <- return (Left 2 :: Either Int Int)
  return (x + y)

outputs

Hello world
*** Exception: user error (Pattern match failure in do expression at Traced.hs:187:3-9)
Trace:
0  Left 2
1  Left 1
Guards

Use the following idiom instead of using guard:

test2 :: IO Int
test2 = do
  Left x <- return (Left 1 :: Either Int Int)
  True   <- return (x == 3)
  return x

The advantage of this idiom is that it gives you line number information when the guard fails:

*Traced> test2
*** Exception: user error (Pattern match failure in do expression at Traced.hs:193:3-6)
Trace:
0  Left 1

Synopsis

Documentation

class MonadS m where Source #

Like Monad but bind is only defined for Traceable instances

Minimal complete definition

returnS, bindS, failS, seqS

Methods

returnS :: a -> m a Source #

bindS :: Traceable a => m a -> (a -> m b) -> m b Source #

failS :: String -> m a Source #

seqS :: m a -> m b -> m b Source #

Instances

MonadS IO Source #

Add tracing to IO (see examples)

Methods

returnS :: a -> IO a Source #

bindS :: Traceable a => IO a -> (a -> IO b) -> IO b Source #

failS :: String -> IO a Source #

seqS :: IO a -> IO b -> IO b Source #

return :: MonadS m => a -> m a Source #

Redefinition of return

(>>=) :: (MonadS m, Traceable a) => m a -> (a -> m b) -> m b Source #

Redefinition of >>=

(>>) :: MonadS m => m a -> m b -> m b Source #

Redefinition of >>

fail :: MonadS m => String -> m a Source #

Redefinition of fail

ifThenElse :: Bool -> a -> a -> a Source #

Definition of ifThenElse for use with RebindableSyntax

data Showable Source #

Constructors

Show a => Showable a