anchor.diff:  library bwu_utils.parse_num;
   
  -bool isInt(String s, {int radix: 10}) {
  +bool isInt(dynamic s, {int radix: 10}) { // TODO test after change to dynamic
     if(s == null) return false;
  +  if(s is int) return true;
  +  if(s is !String) return false;
     return parseInt(s, onErrorDefault: null) is int;
   }
   
  -bool isDouble(String s, {
  +bool isDouble(dynamic s, {
     bool acceptInfinity: false,
     bool acceptNegativeInfinity: false}) {
     if(s == null) return false;
  +  if(s is num) {
  +    return (s != double.INFINITY || s == double.INFINITY && acceptInfinity) ||
  +                  (s != double.NEGATIVE_INFINITY || s == double.NEGATIVE_INFINITY && acceptNegativeInfinity);
  +  }
  +  if(s is !String) return false;
     num parsed = parseNum(s,
         onErrorDefault: null,
         acceptInfinity: acceptInfinity,
  
positive.code:       (acceptNegativeInfinity && parsed.toString() == double.NEGATIVE_INFINITY.toString());
  }
  
  bool isNum(String s, {
    bool acceptInfinity: false,
    bool acceptNegativeInfinity: false}) {
    if(s == null) return false;
    return parseNum(s,
         onErrorDefault: null,
         acceptInfinity: acceptInfinity,
  
negative.code:   if(acceptNegativeInfinity && s.toLowerCase() == double.NEGATIVE_INFINITY.toString().toLowerCase()) {
      return double.NEGATIVE_INFINITY;
    }
    if(s is num && ((s != double.INFINITY || s == double.INFINITY && acceptInfinity) ||
                    (s != double.NEGATIVE_INFINITY || s == double.NEGATIVE_INFINITY && acceptNegativeInfinity))) {
      return s;
    } else {
      s = s.toString();
    }
    if(s is !String) return onErrorDefault;
  
    double result = double.parse(s, (_) => onErrorDefault);
  
  