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

Safe HaskellNone

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 whereSource

Like Monad but bind is only defined for Traceable instances

Methods

returnS :: a -> m aSource

bindS :: Traceable a => m a -> (a -> m b) -> m bSource

failS :: String -> m aSource

seqS :: m a -> m b -> m bSource

Instances

MonadS IO

Add tracing to IO (see examples)

return :: MonadS m => a -> m aSource

Redefinition of return

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

Redefinition of >>=

(>>) :: MonadS m => m a -> m b -> m bSource

Redefinition of >>

fail :: MonadS m => String -> m aSource

Redefinition of fail

ifThenElse :: Bool -> a -> a -> aSource

Definition of ifThenElse for use with RebindableSyntax

data Showable Source

Constructors

forall a . Show a => Showable a 

Instances