code: function find(fn, foldable) {
    if(!isFunction(fn) && !isSameType(Pred, fn)) {
      throw new TypeError('find: Pred or a predicate function is required for first argument')
    }
  
    if(!isFoldable(foldable)) {
      throw new TypeError('find: Foldable required for second argument')
    }
  
    const result = foldable.reduce(accumulator(fn), { found: false })
  
    return result.found ? Just(result.value) : Nothing()
  }
docs: find :: Foldable f => ((a -> Boolean) | Pred) -> f a -> Maybe a