# Moses

Utility library for functional programming in Lua

View the Project on GitHub Yonaba/Moses

A Lua utility-belt library for functional programming.

## Examples

How can I get the sum of all integers between 1 and 100 ?

``````local sum = M.sum(M.range(100))
print(sum) -- 5050
``````

Say I am looking for the length of the longest word in some array ?

``````local words = {'some','words','of','different','lengths'}
print(M.max(words, M.op.length)) -- 9 letters
``````

What is the sum of all fibonacci numbers for n below or equal 25 ?

``````local function fib(n) return n < 2 and n or fib(n - 1) + fib(n - 2) end
local fibsum = M.sum(M.map(M.range(25), fib))
print(fibsum) -- 196417
``````

Or let us do the same, opbject-oriented style with chaining :

``````local function fib(n) return n < 2 and n or fib(n - 1) + fib(n - 2) end
local fibsum = M.chain(M.range(25)):map(fib):sum():value()
print(fibsum) -- 196417
``````

Or even shorter :

``````local fibsum = M(M.range(25)):map(fib):sum():value()
print(fibsum) -- 196417
``````

### Archive

•  2.1.0 (latest stable): zip tar.gz
• Previous versions : tags

### Bash

``````git clone git://github.com/Yonaba/Moses.git
``````

### LuaRocks

``````luarocks install moses
``````

### MoonRocks

``````moonrocks install moses
``````

## Usage

``````local M = require "moses"
``````

Note: the full source moses.lua is quite heavy (~92 kiB, 3115 LOC). You can alternatively use the minified version (~35 kiB, 561 LOC).

## Tutorial

Find a complete set of code examples in tutorial.md.

## Specification

Run spec tests from Lua using busted with the following command from the root folder:

``````busted
``````