code: function hasPropPath(keys, target) {
    if(!isArray(keys)) {
      throw new TypeError(
        'hasPropPath: Array of Non-empty Strings or Integers required for first argument'
      )
    }
  
    if(isNil(target)) {
      return false
    }
  
    let value = target
  
    for(let i = 0; i < keys.length; i++) {
      const key = keys[i]
  
      if(!(isString(key) && !isEmpty(key) || isInteger(key))) {
        throw new TypeError(
          'hasPropPath: Array of Non-empty Strings or Integers required for first argument'
        )
      }
  
      if(isNil(value)) {
        return false
      }
  
      value = value[key]
  
      if(!isDefined(value)) {
        return false
      }
    }
  
    return true
  }
docs: hasPropPath : [ String | Integer ] -> a -> Boolean