Formal representation of a tracer arrow as a Kleisli arrow over some monad, but tagged so that we know whether it has any effects which will emit a trace.
Constructors
Emitting :: Kleisli m a x -> Kleisli m x b -> TracerA m a bAn emitting part, followed by a non-emitting part. The non-emitting part is there so that later emitting parts can be tacked-on later.
Squelching :: Kleisli m a b -> TracerA m a bNo emitting. There may be side-effects, but they are assumed to be benign and will be discarded by runTracerA.