LIST

template <typename T> pure List<T> list();
template <typename T> pure List<T> list(const T &x, List<T> xs);
template <typename T> pure List<T> list(Set<T> s);
template <typename K, typename V> pure List<Tuple<K, V>> list(Map<K, V> m);
pure List<char32_t> list(String s);
template <typename T> pure bool empty(List<T> xs);
template <typename T> pure const T &head(List<T> xs);
template <typename T> pure List<T> tail(List<T> xs) ;
template <typename T> pure const T &last(List<T> xs);
template <typename T> pure size_t size(List<T> xs);
template <typename T> pure List<T> take(List<T> xs, size_t len);
template <typename T, typename F> pure List<T> take_while(List<T> xs, F test);
template <typename T> pure List<T> append(List<T> xs, List<T> ys);
template <typename T> pure List<T> reverse(List<T> xs);
template <typename T, typename U> pure List<Tuple<T, U>> zip(List<T> xs, List<U> ys);
template <typename T, typename F> pure List<T> sort(List<T> xs, F cmp);
template <typename T> pure List<T> sort(List<T> xs);
template <typename T, typename A, typename F> pure A foldl(List<T> xs, const A &a, F func);
template <typename T, typename A, typename F> pure A foldr(List<T> xs, const A &a, F func);
template <typename U, typename T, typename F> pure List<U> map(List<T> xs, F func);
template <typename T, typename F> pure List<T> filter(List<T> xs, F func);
template <typename T> pure int compare(List<T> xs, List<T> ys);
template <typename T> pure String show(List<T> xs);
template <typename T> pure ListItr<T> begin(List<T> xs);
template <typename T> pure ListItr<T> end(List<T> xs);
template <typename T> ListItr<T> &operator++(ListItr<T> &i);
template <typename T> pure const T &operator*(ListItr<T> &i);

template <typename T>
pure List<T> list()

Construct an empty list. O(1).


template <typename T>
pure List<T> list(const T &x, List<T> xs)

Constructor a list from a head and a tail. O(1).


template <typename T>
pure List<T> list(Set<T> s)

Construct a list from a set. O(n).


template <typename K, typename V>
pure List<Tuple<K, V>> list(Map<K, V> m)

Construct a list from a map. O(n).


pure List<char32_t> list(String s)

Construct a list from a string. O(n).


template <typename T>
pure bool empty(List<T> xs)

Test if a list is empty. O(1).


template <typename T>
pure const T &head(List<T> xs)

Get the head of a list. O(1).


template <typename T>
pure List<T> tail(List<T> xs) 

Get the tail of a list. O(1).


template <typename T>
pure const T &last(List<T> xs)

Get the last element of a list. O(n).


template <typename T>
pure size_t size(List<T> xs)

List size (a.k.a. list length). O(n).


template <typename T>
pure List<T> take(List<T> xs, size_t len)

List take `len' elements. O(n).


template <typename T, typename F>
pure List<T> take_while(List<T> xs, F test)

List take while `test' is true. ([](T elem) -> bool). O(n).


template <typename T>
pure List<T> append(List<T> xs, List<T> ys)

List append. O(n).


template <typename T>
pure List<T> reverse(List<T> xs)

List reverse. O(n).


template <typename T, typename U>
pure List<Tuple<T, U>> zip(List<T> xs, List<U> ys)

List zip. O(n).


template <typename T, typename F>
pure List<T> sort(List<T> xs, F cmp)

List sort with comparison `cmp'. ([](_T a, _T b) -> int). O(n^2).


template <typename T>
pure List<T> sort(List<T> xs)

List sort. O(n^2).


template <typename T, typename A, typename F>
pure A foldl(List<T> xs, const A &a, F func)

List fold left. ([](A a, T x) -> A). O(n).


template <typename T, typename A, typename F>
pure A foldr(List<T> xs, const A &a, F func)

List fold right. ([](A a, T x) -> A). O(n).


template <typename U, typename T, typename F>
pure List<U> map(List<T> xs, F func)

List map. ([](T x) -> U). O(n).


template <typename T, typename F>
pure List<T> filter(List<T> xs, F func)

List filter. ([](T x) -> bool). O(n).


template <typename T>
pure int compare(List<T> xs, List<T> ys)

List compare. O(n).


template <typename T>
pure String show(List<T> xs)

List show. O(n).


template <typename T>
pure ListItr<T> begin(List<T> xs)

Construct an iterator pointing to the start of a list. O(1).


template <typename T>
pure ListItr<T> end(List<T> xs)

Construct an iterator pointing to the end of a list. O(1).


template <typename T>
ListItr<T> &operator++(ListItr<T> &i)

List iterator increment. O(1).


template <typename T>
pure const T &operator*(ListItr<T> &i)

List iterator dereference. O(1).