improve diagram combinators