   '_':  fns.length
   '>':  fns.greater
   '<':  fns.lesser
+  '..': fns.range
+  '%':  fns.slice
 
 module.exports = library

  length:  fns.length
  greater: fns.greater
  lesser:  fns.lesser

  # Lispy stuff and shortcuts
  '+':  (x) -> x[0] + x[1]

  length:  (x) -> x[0].length
  greater: (x) -> x[0] > x[1]
  lesser:  (x) -> x[0] < x[1]
  range:   (x) -> [x[0]..x[1]]
  slice:   (x) -> x[0].slice.call(x[0], x[1..])

library =
  lure:    process.argv
  true:    true
  false:   false

  # Haskellish stuff
  head:    (a) -> a[0][0]
  tail:    (a) -> a[0][1..]
  last:    (a) -> a[0].slice(-1)[0]
  init:    (a) -> a[0][0..-1]
  take:    (x) -> x[1][0..x[0]]
  drop:    (x) -> x[1][(x[1].length - x[0])..-1]
  min:     (a) -> a[0].reduce (x, y) -> if x < y then x else y
  max:     (a) -> a[0].reduce (x, y) -> if x > y then x else y
  elem:    (x) -> x[0] in x[1]
  reverse: (a) -> a[0].reverse()

  reduce:  (a) -> a[1].reduce (p, x, i) -> a[0] [p, x]
  map:     (a) -> a[1].map (x) -> a[0] [x]

  print:   fns.print
  at:      fns.at
