actually, why not just add an isNonZero fuction and reflect once to either make that function always return true or call through to Monoid.