# Yonaba / Moses

Utility library for functional programming in Lua

## Latest commit

`Fixed typo in README.`
6fe8d76

## Files

Failed to load latest commit information.
Type
Name
Commit time

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, object-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```

### 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
``````

Utility library for functional programming in Lua