rem: return v->u.s[0] == '\0' || strcmp (v->u.s, "0") == 0;
add: { char const *cp = v->u.s; if (*cp == '\0') return true;  cp += (*cp == '-');  do { if (*cp != '0') return false; } while (*++cp);  return true; }
context: null (VALUE *v){  switch (v->type)    {    case integer:      return v->u.i == 0;    case string:      return v->u.s[0] == '\0' || strcmp (v->u.s, "0") == 0;    default:      abort ();    }}