func (l *List) Prepend(el interface{}) *List {
	return &List{el, l}
}
Prepend prepends the given element to the front of the list, returning a copy of the
new list. Completes in O(1) time.
package seq
type List struct {
	el   interface{}
	next *List
}
func NewList(els ...interface{}) *List {
	elsl := len(els)
	if elsl == 0 {
		return nil
	}
	var cur *List
	for i := 0; i < elsl; i++ {
		cur = &List{els[elsl-i-1], cur}
	}
	return cur
}
func (l *List) Hash(i uint32) uint32 {
	sum := uint32(0)
	s := Seq(l)
	var el interface{}
	var ok bool
	for {
		if el, s, ok = s.FirstRest(); !ok {
			return sum
		}
		sum += hash(el, i)
	}
}
func (l *List) Equal(v interface{}) bool {
	l2, ok := v.(*List)
	if !ok {
		return false
	}
	s, s2 := Seq(l), Seq(l2)
	var ok2 bool
	var el, el2 interface{}
	for {
		el, s, ok = s.FirstRest()
		el2, s2, ok2 = s2.FirstRest()
		if !ok && !ok2 {
			return true
		} else if ok != ok2 {
			return false
		} else if !equal(el, el2) {
			return false
		}
	}
}
func (l *List) FirstRest() (interface{}, Seq, bool) {
	if l == nil {
		return nil, l, false
	}
	return l.el, l.next, true
}
func (l *List) String() string {
	return ToString(l, "(", ")")
}