code: function setup(e) {
  
    e.explaination = []
    e.explain = function (template, parts, message) {
      e.explaination.push({
        template: template,
        parts: parts,
        message: message
      })
      return e
    }
    e.simple = function (name, actual, expected, operator, message) {
      return e.explain(
          name + ': {actual} {operator} {expected}'
        , { actual: actual
          , expected: expected
          , operator: operator }
        , message
      )
    }
    e.toString = function () {
      return e.explaination.map(function (e) {
        return (
          fomatto(e.template, e.parts)
        + ( e.message  ? '\n  ' + fomatto(e.message, e.parts) : '' )
        )
      }).join('\n')  
    }
   
    e.__defineGetter__('message', function () {
      return '' + e
    })
    return e
    
  }
docs: /*
  function renderPath(p){
  return p.map(function (e){
  if(!isNaN(e))
  return '[' + e + ']'
  if(/^\w+$/(e))
  return '.' + e
  return '[' + JSON.stringify(e) + ']'
  }).join('')
  }