def minimumBy(f, xs):
    """
    minimumBy :: (a -> a -> Ordering) -> [a] -> a

    The minimumBy function takes a comparison function and a list and returns
    the least element of the list by the comparison function. The list must be
    finite and non-empty.
    """
    return min(xs, key=f)