code: function unsetPath(path, obj) {
    if(!isArray(path) || isEmpty(path)) {
      throw new TypeError(pathError)
    }
  
    if(!(isObject(obj) || isArray(obj))) {
      return obj
    }
  
    const key = path[0]
  
    if(!(isString(key) && !isEmpty(key) || isInteger(key) && key >= 0)) {
      throw new TypeError(pathError)
    }
  
    if(path.length === 1) {
      if(isArray(obj) && isInteger(key)) {
        return array.unset(key, obj)
      }
  
      if(isObject(obj) && isString(key)) {
        return object.unset(key, obj)
      }
  
      return obj
    }
  
    const next =
      obj[key]
  
    if(!(isObject(next) || isArray(next))) {
      return obj
    }
  
    if(isArray(obj)) {
      return array.set(key, unsetPath(path.slice(1), next), obj)
    }
  
    return object.set(key, unsetPath(path.slice(1), next), obj)
  }
docs: unsetPath :: [ String | Integer ] -> a -> a