No description, website, or topics provided.
JavaScript CSS
Switch branches/tags
Nothing to show
Latest commit 46885d1 Jul 9, 2014 @DrBoolean DrBoolean fix amd issue
Failed to load latest commit information.
test dist updated for browser/amd Jun 11, 2014
index.js getting serious Jun 11, 2014


The full ECMAScript API done a functional way.


  1. The data comes last. E.g: str.method(arg) -> method(arg, str)
  2. Everything is curried
  3. Functions with optional arguments are split into two functions. One with _ at the end that takes the options. E.g: indexOf(x,str) & indexOf_(x,y,str)
  4. Every function is pure

Thanks so much to @casperin and @eschmitt for doing a ton of the work on this though isn't not visible in the contributors.




There is an expose() method to "mix in" to the global namespace if desired.

In the browser

<script src="dist/lambda.browser.js"></script>


define(['dist/lambda.amd.js'], function(Ljs){

In node

npm install lambdajs
var ljs = require('lambdajs');




Let's say you want to replace "-" for "/" in a js function. Typically you'd have to do:

var dashesForSlashes = function(str) {
  return str.replace(/-/g, '/');

This has some issues.

  • We had to name a temporary variable str
  • We had to write some "glue code" - a full function(){} complete with return
  • We are dependent upon the str to be able to call replace

In functional "point free" style we don't need to grab a hold of our data to be able to write new functions. In this case, by "data" I mean the string.

LambdaJS let's us write something like this:

var dashesForSlashes = replace(/-/g, '/');

This is very useful when dealing with compose

var f = compose(toUpperCase, replace(/-/g, '/'))
f("hi-guys") //=> HI/GUYS

Another issue is, in standard javascript, if you call reverse on an array, you will permanently alter the array:

var users = ['Alex', 'Sam', 'Pat']
users.reverse(); //=> ['Pat', 'Sam' 'Alex']
users //=> ['Pat', 'Sam' 'Alex']

That can be quite surprising when you go to display users in a different spot of your app and they are out of order.

LambdaJS makes all the built-in functions "pure", meaning there is no side-effects or mutation.

var users = ['Alex', 'Sam', 'Pat']
reverse(users); //=> ['Pat', 'Sam' 'Alex']
users //=> [['Alex', 'Sam', 'Pat']

If you're interested in learning more about currying and composition, I gave a talk on this subject a little while ago: Hey underscore, you're doing it wrong!

ROADMAP (help if ya want!):