Macro peel_ip::prelude::tap []

macro_rules! tap {
    (
$ i : expr , $ name : ident : $ submac : ident ! ( $ ( $ args : tt ) * ) => $
e : expr ) => { ... };
    ( $ i : expr , $ name : ident : $ f : expr => $ e : expr ) => { ... };
}

tap!(name: I -> IResult<I,O> => { block }) => I -> IResult<I, O> allows access to the parser's result without affecting it

 named!(ptag, tap!(res: tag!( "abcd" ) => { println!("recognized {}", str::from_utf8(res).unwrap()) } ) );

 let r = ptag(&b"abcdefgh"[..]);
 assert_eq!(r, Done(&b"efgh"[..], &b"abcd"[..]));