code: function renderPath(path){
    if('function' !== typeof path.map) return "<path:" + render(path) + ">"
    return path.map(function (e){
      if(!isNaN(e))
        return '[' + e + ']'
      if(/^\w+$/.test(e))
        return '.' + e
      return '[' + JSON.stringify(e) + ']' 
    }).join('')
  }
docs: /*
  generating error messages
  
  assertion
  message
  
  property(null, 'hello')
  property: null did not have 'hello'
  
  property([0], '0', _isTruthy)
  property: '0' of '[0]' did not pass isTruthy
  isTruthy: 0 != true
  
  all(3, _isTruthy, _isNumber, _isEven)
  
  all: 3 did not pass '_isTruthy', '_isNumber' and '_isEven'
  isEven: 3 is not even
  
  what is the structure here?
  name: actual 'opperator' expected
  
  and higher assertions need a way to wrap the lower assertions
  
  try {
  assertion(actual, expected, message) // ?
  } catch (fail) {
  throw fail.explain(name, actual, expected, opperator, message)
  }
  
  name: actual opperator assertion
  assertion: actual opperator expected
  message