def count(iterable, pred=None): pred = Function(pred or utils.always(True), arity=1) return compatible.reduce(lambda n, _: n + 1, where(iterable, pred), 0)
def first(iterable, pred=None, default=_undefined): pred = Function(pred or utils.always(True), arity=1) return where(iterable, pred).elementat(0, default)
def last(iterable, pred=None, default=_undefined): pred = Function(pred or utils.always(True), arity=1) return reverse(iterable).first(pred, default)
def takewhile(iterable, pred): pred = Function(pred or utils.always(True), arity=1) return itertools.takewhile(pred, iterable)