different version of method suppresses existential inference warning (although requires constructing a cast)
cleanup macros to use quasiquotes more. don't bother with unneeded c.Expr[T] wrappings